AbstractUI
抽象的なUIコンポーネントが必要
- 各コンポーネントはロジックを司るクラスとビューを司るクラスによって構成
- 例: スクロールバー
- IScrollbar
- IScrollbarView
- 例: スクロールバー
- 基本的に俺らはビューの方のサブクラスを作ることによってカスタマイズする
- IScrollbar実装クラスのコンストラクタにIScrollbarView実装クラスを渡して使う
- var scrollbar:IScrollbar = new ScrollbarImpl?(new MyScrollbarView(myScrollbarSprite));
- ロジッククラスの役割:
- コンポーネントに必要な値の保持
- (Viewからの)イベントに対するハンドリング
- コンポーネントに必要な値の再計算
- Viewに必要な値を渡して更新を要請
- ビュークラスの役割:
- 必要な入力に対するイベントの配信
- ロジッククラスが必要な値を返す
- 画面への描画
- スクロールする時にいきなりスクロールする(Flex方式)のか、スムーズにトゥイーンしながら動く(FLASHer方式)のか、ということは、ロジッククラスの方にアルゴリズムを持たせて決める
- 要するに、アニメーションとか一見ビューの役割っぽく見えても、コンポーネントの値やロジックに関わる部分はロジッククラスに持たせる
- それ以外のアニメーション(例えばロールオーバーした時にアニメするとか)はViewの方で勝手にやる
- (プロジェクト内で使う設定はほぼ一定だろうけど)一々アルゴリズムの設定とかするのは面倒なのでScrollbarDefault?みたいなクラスを作って、デフォルト設定を全て持たせる
- プロジェクトの先頭(メインクラスの最初の方)で一気に初期化する
- ScrollbarImpl?はScrollbarDefault?を見て値を初期化する
- ビューのコンストラクタにはターゲットとなるDisplayObject?を渡してやる
- そして、例えば渡されたのがDisplayObjectContainer?で、"rolloverSprite"という名前の子を持っていれば、ロールオーバー時にそれを表示、みたいに柔軟に対応
仮にScrollbarのインターフェイスを定義すると次のような感じになるのでは(ホントはgetter/setter ювелирный интернет магазин だけど無視)
public interface IScrollbar extends IEventDispatcher
{
public var 現在スクロール位置:Number;
public var 最大スクロール位置:Number;
public var 最小スクロール位置:Number;
public var スクロール量:Number;
public var ページ量:Number;
public var スクロールアルゴリズム:IScrollTween;
public var スクロールリピートアルゴリズム:IScrollRepeat;
public function 上方向スクロール():void;
public function 下方向スクロール():void;
}
public class ScrollbarEvent extends Event
{
public static const スクロール位置の変化:String = 'scrollChanged';
}
public interface IScrollbarView
{
public var 上ボタン用EventDispatcher:IEventDispatcher; // MouseEvent.MOUSE_DOWNとか送る
public var 下ボタン用EventDispatcher:IEventDispatcher;
public var バー用EventDispatcher:IEventDispatcher;
public var スクロールバー全体の高さor幅に対するマウスの位置:Number;
public function 更新(scrollbar:IScrollbar):void; // おおざっぱだ...
}
添付ファイル
- gif-187.gif (2.3 kB) - icemylife によって 2008/07/30 10:24:06 に登録されました。

