クラス化
forked from イベントリスナの外にある変数を匿名関数で使いたい (diff: 41)
ActionScript3 source code
/**
* Copyright 9re ( http://wonderfl.net/user/9re )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/gXna
*/
// forked from masamunet's イベントリスナの外にある変数を匿名関数で使いたい
package {
import flash.display.Sprite;
import flash.display.Graphics;
import flash.events.MouseEvent;
import flash.text.TextField;
import flash.text.TextFieldAutoSize;
public class FlashTest extends Sprite {
public function FlashTest() {
var tf:TextField = new TextField;
tf.autoSize = TextFieldAutoSize.LEFT;
tf.text = "ここに数字が表示されます。";
addChild(tf);
//直径
var radius:Number = 10.0;
//横の間隔
var marginWidth:Number = 5.0;
//縦の間隔
var marginHeight:Number = 15.0;
//ボタンの数
var l:int = 5;
for (var i:int = 0; i < l; i++)
{
// これくらいの短いコード片なら
// 特に何もありませんが、一般的にループ内で
// イベントリスナー付けたり、なんやかんやしたりというのは
// 普通のオブジェクトではなくて、クラス化した方が良いことも。。。
// ただし、AS2などをやっているときは、クロージャーの即時実行による
// 変数の閉じ込めを利用するというのは非常に有効な手段です
var sp:Circle = new Circle(i);
sp.logTarget = tf;
sp.x = ((sp.width + marginWidth) * i) + radius;
sp.y = tf.height + marginHeight;
addChild(sp);
}
}
/*private function createCircle(radius:Number = 10.0, color:uint = 0xFF0000):Sprite {
var sp:Sprite = new Sprite();
var g:Graphics = sp.graphics;
g.beginFill(color);
g.drawCircle(0, 0, radius);
g.endFill();
return sp;
}*/
}
}
import flash.display.*;
import flash.events.MouseEvent;
import flash.text.TextField;
class Circle extends Sprite {
public var id:int;
public var logTarget:TextField;
public function Circle (id:int, radius:Number = 10.0, color:uint = 0xFF0000) {
var g:Graphics = graphics;
g.beginFill(color);
g.drawCircle(0, 0, radius);
g.endFill();
buttonMode = true;
addEventListener(MouseEvent.CLICK, function ():void {
logTarget.text = "このボタンナンバーは " + id + "です。";
});
this.id = id;
}
}