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