FLASH(FLEX)でGUIの場合に、まず、それぞれのエンティティを、
どういう形で持つかというところから始める。
もちろん、objectとして持つので、グラフィックスをもてる形でもつのは当然として、
ページがあったり、レイヤーがあったりするので、そこらへんの階層をどう考えるかだね。
データ上の階層と表示やGUI上の階層は一致させる必要がないけど、
たいがい、一致させとかないと、バグる元。
ってことで、FLASH(FLEXではなく)でやってたときは、
movieClipかSpriteでなんでもかんでもやってたんだけど、
FLEXではSpriteはそのまま使えないから、UIComponentでやることになるのかな。
それが最良かどうかは、やってみないとわからないので、
とりあえず、それで、POLYや画像を表示させたり、編集したりとかしてみて判断しよう。
ということで、ポリを書いてみることにする。
順を追うと、、こんな感じでテスト。
●UIComponentを継承した基本クラスを作る。
●その基本クラスをExtendsした、item用のクラスを作る。
●itemを動的に生成して、その中のgraphicsにポリを入れてみる。
●mouseDown-Move-Upに対応させて移動させてみる。
ここで、随分前にちょっと書いた、mouseイベントを最下層で拾うクラスを仕込んでみる。
要するに、
★itemにMouseDonwがくる
↓
★最下層Mouseイベント用クラスの、MouseDown/Up/Moveイベントを、
itemのpublic関数に持ってくるように設定する。
↓
★itemにMouseDonwがくる
↓
★処理をしたあと、イベントの転送先を削除する
で、基本クラス。
public class spBase extends UIComponent{
public var mother:Object;
//--------------------
function spBase(){
}
//--------------------
public function init(f:Object):void{
mother = f;
this.addEventListener(Event.REMOVED_FROM_STAGE, removed);
//-------------------
// MouseDown
//-------------------
var own:Object = this;
this.addEventListener(MouseEvent.MOUSE_DOWN,
function (e:MouseEvent):void{
mother.app.getKAM().setMAll(own.fd,own.fu,own.fm,own.fo);
}
);
}
//--------------------
protected function fd(e:MouseEvent):void{
trace("Down\n");
}
protected function fu(e:MouseEvent):void{
trace("Up\n");
mother.app.getKAM().setMClear();
}
protected function fm(e:MouseEvent):void{
trace("Move ");
}
protected function fo(e:MouseEvent):void{
trace("Over ");
}
//--------------------
// like a destructer
//--------------------
private function removed(e:Event):void{
removeEventListener(Event.REMOVED_FROM_STAGE, removed);
}
}
で、itemクラスの雛形。
public class spItem extends soul.spBase{
override protected function fd(e:MouseEvent):void{
trace("spItem::Down\n");
}
override protected function fu(e:MouseEvent):void{
trace("spItem::Up\n");
mother.app.getKAM().setMAll(null,null,null,null);
}
override protected function fm(e:MouseEvent):void{
trace("spItem::Move ");
}
override protected function fo(e:MouseEvent):void{
trace("spItem::Over ");
}
}
で、呼ぶ時。motherは、MXMLでのthisを渡している。。(-_-;)
testobj = new soul.spItem();
testobj.init(mother);//mother:MXMLのthis