MTASCおためし
WEB+DBプレスがまだ店頭に並んでないので、先に遊んでみました。うーむ。Action Scriptって書くのめんどいのでASと略します。
- MTASC
- あくまでもASコンパイラ。コマンドラインでも使えます。
- ASDT
- ASエディタとかFlash用プロジェクトのサポートとかがあるEclipseプラグイン。コンパイラにMTASCを指定する、と。
- flashout
- Eclipseプラグイン。既存swfにASをねじ込んだり、asからswfを作ったりする。
って事でよいのかな。以上3つを用意。遊んでみました。
さて、MX側でデザイナーさんが書いたASと共存出来るか問題ですが、当たり前の様に出来ました。同じボタンのclickイベントで、MX側とASDT側で書いた両方が走ります。ナイス。
で、こないだのセミナーのサンプルでは、エントリポイントのあるmainクラス自身がイベントリスナオブジェクトと化しておりました。ちょっと変えてあるけど(enterでclickと同じ事させてみた)こんな感じ。
class Hoge{ function Hoge(){ _root.test_btn.addEventListener("click",this); _root.test_txt.addEventListener("enter",this); } function click(event){ copyString(); } function enter(event){ copyString(); } function copyString(){ _root.testLabel_txt.text = _root.test_txt.text + "ですわ。"; } static function main(){ var hoge:Hoge = new Hoge(); } }
ASのクラスと画面の関係をどうすりゃベストかがよく判らないんだけど、このままだと部品一個につき1クラスって感じになる。正確に云えば、上記copyString()をclickとenterに割り当てたい部品1グループにつき1クラス。
1つの画面にボタンがたくさんある場合とか大変そうだ。クラスの数も膨れ上がるし、エントリポイントが new だらけで凄い事になりそう。結局標準的なASのイベントの書き方をするのがいいのかな。で、1画面につき1クラスって感じ。
class Hoge{ function Hoge(){ var testListener = new Object(); testListener.click = function(event){ copyString(); } testListener.enter = function(event){ copyString(); } _root.test_btn.addEventListener("click",testListener); _root.test_txt.addEventListener("enter",testListener); } function copyString(){ _root.testLabel_txt.text = _root.test_txt.text + "ですわ。"; } static function main(){ var hoge:Hoge = new Hoge(); } }
こうすりゃ、複数ボタンがあっても都度リスナオブジェクトを作ればよいんだが、うーん深く考えてないので設計上どうなのか判らん。何せトイプログラムじゃどう書いてもさして変わらないから、想像力たくましくして、本番の時にどれだけ苦労しそうか考えにゃならん。が、全く判らんです。
うーん、ブレイクポイント使ってデバグ出来ないのがつらいなあ。それ考えるとFlex2がなあ。MXもASファイル外出しにしたら駄目だったっけ。すっかり忘れてます。
動く事は判ったけど、どう書いたらいいのか、と云うより、どう設計するのがベストなのか、これが一番の問題だなあ。頭ぐるぐるする・・・。