facebook twitter hatena line email

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();
    }
  }
}