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がくる

★処理をしたあと、イベントの転送先を削除する

で、基本クラス。
  1. public class spBase extends UIComponent{  
  2.     public var mother:Object;  
  3.     //--------------------  
  4.     function spBase(){  
  5.   
  6.     }  
  7.     //--------------------  
  8.     public function init(f:Object):void{  
  9.         mother = f;  
  10.         this.addEventListener(Event.REMOVED_FROM_STAGE, removed);  
  11.         //-------------------  
  12.         //  MouseDown  
  13.         //-------------------  
  14.         var own:Object = this;  
  15.         this.addEventListener(MouseEvent.MOUSE_DOWN,  
  16.             function (e:MouseEvent):void{  
  17.                 mother.app.getKAM().setMAll(own.fd,own.fu,own.fm,own.fo);  
  18.             }  
  19.         );  
  20.     }  
  21.     //--------------------  
  22.     protected function fd(e:MouseEvent):void{  
  23.         trace("Down\n");  
  24.     }  
  25.     protected function fu(e:MouseEvent):void{  
  26.         trace("Up\n");  
  27.         mother.app.getKAM().setMClear();  
  28.     }  
  29.     protected function fm(e:MouseEvent):void{  
  30.         trace("Move ");  
  31.     }  
  32.     protected function fo(e:MouseEvent):void{  
  33.         trace("Over  ");  
  34.     }  
  35.     //--------------------  
  36.     //  like a destructer  
  37.     //--------------------  
  38.     private function removed(e:Event):void{  
  39.         removeEventListener(Event.REMOVED_FROM_STAGE, removed);  
  40.     }  
  41. }  

で、itemクラスの雛形。
  1. public class spItem extends soul.spBase{  
  2.     override protected function fd(e:MouseEvent):void{  
  3.         trace("spItem::Down\n");  
  4.     }  
  5.     override protected function fu(e:MouseEvent):void{  
  6.         trace("spItem::Up\n");  
  7.         mother.app.getKAM().setMAll(null,null,null,null);  
  8.     }  
  9.     override protected function fm(e:MouseEvent):void{  
  10.         trace("spItem::Move ");  
  11.     }  
  12.     override protected function fo(e:MouseEvent):void{  
  13.         trace("spItem::Over  ");  
  14.     }  
  15. }  

で、呼ぶ時。motherは、MXMLでのthisを渡している。。(-_-;)
  1. testobj = new soul.spItem();  
  2. testobj.init(mother);//mother:MXMLのthis  







2011年8月22日月曜日

FLASH再び。

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