AbstractUI

抽象的なUIコンポーネントが必要

  • 各コンポーネントはロジックを司るクラスとビューを司るクラスによって構成
    • 例: スクロールバー
      • IScrollbar
      • IScrollbarView
  • 基本的に俺らはビューの方のサブクラスを作ることによってカスタマイズする
  • IScrollbar実装クラスのコンストラクタにIScrollbarView実装クラスを渡して使う
  • ロジッククラスの役割:
    • コンポーネントに必要な値の保持
    • (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; // おおざっぱだ...
}

pacquiao vs bradley pacquiao vs bradley live streaming

添付ファイル