Forked from: masamunet's イベントリスナの外にある変数を匿名関数で使いたい diff:13 方法その2:クロージャーに閉じ込めてしまう masamunet forked:1favorite:0lines:41license : MIT License modified : 2010-02-11 11:29:57 Embed Tweet // forked from hacker_ij9oiq_p's flash on 2010-2-11 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++) { var sp:Sprite = createCircle(radius); sp.buttonMode = true; sp.x = ((sp.width + marginWidth) * i) + radius; sp.y = tf.height + marginHeight; addChild(sp); //方法その2 //クロージャーに閉じ込めてしまう (function():void { var idNumber:int = i; sp.addEventListener(MouseEvent.CLICK, function(e:MouseEvent):void { tf.text = "このボタンナンバーは " + idNumber + "です。"; }); })(); } /* * 参照ってややこしいですね。 * なぜこう動くのか、僕もきちんと説明できる自信がない… */ } 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; } } } Code Fullscreen Preview Fullscreen drawCircle text TextFieldAutoSize.LEFT MouseEvent.CLICK endFill beginFill MouseEvent uint int Number sort new page view favorite forked pv437 forked from: 方法その2:クロージャーに閉じ込め.. ddasodd forked:1 favorite:0lines:46 (diff:23)