Flash/as3/EventDispatcher
提供: 初心者エンジニアの簡易メモ
丸の値を変更した際に丸ビューを再描画するサンプル
Main.as(controller)
package { import flash.display.Sprite; import flash.events.Event; import CircleView; import Circle; /** * メイン */ public class Main extends Sprite { public function Main():void { if (stage) init(); else addEventListener(Event.ADDED_TO_STAGE, init); } private function init(e:Event = null):void { removeEventListener(Event.ADDED_TO_STAGE, init); // entry point // 円の値インスタンス生成 var circle:Circle = new Circle(); // 円のビューインスタンス生成 var circleView:CircleView = new CircleView(circle); // 円を子に割り当て addChild(circleView); // 円の半径を100に変更 circle.r = 100; // この後変更イベントが発生してビューの半径が100になる } } }
Circle.as
package { import flash.events.EventDispatcher; import flash.events.Event; /** * 円の値 */ public class Circle extends EventDispatcher { // 半径 private var _r:uint = 50; public function Circle() { } public function set r(r:uint):void { _r = r; dispatchEvent(new Event(Event.CHANGE)); } public function get r():uint { return _r; } } }
CircleView.as
package { import flash.display.Sprite; import flash.events.Event; import Circle; /** * 円のビュー */ public class CircleView extends Sprite { private var _circle:Circle; public function CircleView(circle:Circle) { _circle = circle; // 値変更イベントハンドラ circle.addEventListener(Event.CHANGE, _change); // 描画 draw(); } // 値変更イベント public function _change(event:Event):void { draw(); } // 描画 public function draw():void { graphics.beginFill(0x0000ff); graphics.drawCircle(200, 200, _circle.r); graphics.endFill(); } } }