AS3メモ AS3用コンポーネントのアイデア
AS3で、Flash上でオーサリングしたMCをUIコンポーネントとしてどうすればいいのかな?
っと昨日のよるずっとvoidさんとチャットしてた。
ライブラリのアイテムとClassが一対一の関係なので、UIの外見の数だけサブクラス作るような事態は避けたい感じ。
んだけど、そんで考えた自分なりのアイデア。
V2コンポーネントのCellRenderクラスとかの当たりからアイデアを得たんだけど、ボタンなりテキストフィールドなり、1つのUIコンポーネントを、機能&データ、外見コントロール、外見の3つに分割するのがよいのかなぁ。
・MyButton クラス( ボタンの機能そのものを実装する )
・MyButtonRender クラス( マウスオーバー等のボタンの外見のコントロールを行う )
・SkinMovieClip (実際にUIとして表示される、MovieClip。 ラベルでいろんなステートの表示が入ってる)
MVCならぬ、 Model&Controll, ViewControll, View の分割。
で、ボタンを作成すると実行するときはこんなイメージ。
btn:MyButton = new MyButton( newMyButtonRender( new SkinMovieClip() ) );
こうすれば、外見を変更するときには SkinMovieClipを変更するだけで、 クリックしたときにボヨヨンとアニメーションしたり、特殊なエフェクトを追加するときには、ButtonRenderクラスを変更するだけど、同じ機能のボタンをまるっきりカスタマイズできる。
ただちょっと悩んでるのが、 MyButtonクラスをSpriteサブクラスにしてスキンとなるMCをaddChildするべきなのか、MyButtonクラスはDiesplayObjectを継承せずに非表示のクラスにするか・・・ という点。これが非常に悩ましい。
MyButtonクラスをSpriteサブクラスにした場合、内部にスキンをaddChildするので、既にオーサリング環境で画面に配置されたMovieClipをスキンにすることができない。アタッチ専用のクラスだとデザインしにくくなる。
その点、MyButtonクラスを非DisplayObjectにした場合、画面に表示されたオブジェクトもこれからアッタッチするオブジェクトもどちらもスキンとして使えるようになる。しかし、コンポーネントのコンテナとなるクラスは、既に画面にあるものをにクラスを結びつけるので、スキンとボタンの両方の参照を持ってなきゃならなくなる。メンドイ。
ちょっと、AS3でサクサクモノを作るにはこのあたりをなんとか解決しないとならないと思うんだけど、
この辺、色々な神コーダーのみなさまとかはどう考えてるんでしょうか。
教えてクリクリ。