2011年8月30日火曜日

FLASHでGUIの1

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







2011年8月22日月曜日

FLASH再び。

長らく更新してませんでした。あまりに忙しく。。(-_-;)
ってことで、再会再開です。
とりあえず、、、ここ数ヶ月C++ばっかりだったので、FLASHを思い出すところから始めないと。