Progression を読む その2 - Progression.as コンストラクタ

コンストラクタ 558行〜
やっとこさコンストラクタ登場。

public function Progression( id:String, stage:Stage = null, rootClass:Class = null )

引数たち

id
インスタンスの識別子
stage
関連付けたい Stage インスタンス
rootClass
ルートシーンに関連付けたいクラスの参照

たとえばこんな感じに使う。

prog = new Progression( "index", stage, IndexScene );

で、次にエラー処理3つ。

  • 冒頭で定義した定数VERSIONと比較し古いプレーヤーで動いている場合はエラー
  • Progression 識別子(id)がすでに登録されていればエラー
  • stageが定義されていなければエラー

エラーの送出は jp.nium.core.errors.ErrorMessageConstants クラスを利用している。

idの登録確認には ProgressionCollection クラスの __getInstanceByIdメソッドを使用している。

後で調べる
  • return Progression( _ids[id] ); ってどういう意味?
    • クラス or コンストラクタに new 演算子つけないで実行するとどういう挙動になるの??

_stage = _stage || stage;_stage ||= stage; と書けることを知る。勉強になるなぁ。

変数初期化

パッケージ情報を表示した後に、各種変数初期化。

  • id
  • eventHandlerEnabledtrue
  • firstSceneId を取得
    • ブラウザのURL(BrowserInterface.locationHref)から senePath を取得
    • ブラウザ上でない場所で再生された場合(!BrowserInterface.enabled)は初期値( "/" + id)を使用

表示系を追加

Background を 表示
  • _stage.addChildAt( _background, 0 );
  • 一番下になにか配置したい場合は Progression._background.addChild(表示したいなにか); と書けばいいっぽい。
    • _background は private なクラス変数の為、クラス内からのみ参照可能だから上記のような使用方法はできない。
    • 前述したが、_stage や _container は外部から参照する為のセッターが用意されているが、_background はない。
      • じゃあ、_background ってなんの為に用意されているんだ??
  • Background は CastSprite を継承している
Container を表示
  • _stage.addChild( _container );
  • Backgroundより上になにかを配置したい場合は progression.container.addChild(表示したいなにか); と書く。
  • Container は CastSprite を継承している

SceneManager (調べ中)

KeyboardManager (調べ中)

SyncManager (調べ中)

rootClass 関連

  • まず、 rootClass が存在しなければ SceneObject に変換する rootClass ||= SceneObject;
  • rootClass を作成 (インスタンス名 root)
  • root が 作成できなかった場合(SceneObject クラスを継承していない場合)はエラーを送出する
    • SceneObject のクラス変数 progression_internal::__owner に this を代入する

SceneObject のクラス変数 __owner について

ScanManager の root に root を代入する

ProgressionCollectionに登録

  • ProgressionCollection の クラス変数 _ids:Dictionary に _id をキーにして this を登録する
  • ProgressionCollection の クラス変数 _instances:Dictionary に 登録されたインスタンス数(_numInstances)をキーにして this を登録する
  • ProgressionCollection の クラス変数 _nums:Dictionary に this をキーとして登録したインスタンス番号(_numInstances)を登録して、_numInstances++
  • ProgressionCollection クラスから CollectionEvent.COLLECTION_UPDATE イベント送出

イベント送出

  • SceneEvent.SCENE_ADDED
  • SceneEvent.SCENE_ADDED_TO_ROOT


以上、コンストラクタ。

コンストラクタ部分を読んで収穫したもの

  • 一番下になにか配置したい場合は Progression._background.addChild(表示したいなにか); と書けばいいっぽい。
    • _background は private なクラス変数の為、外部からは参照できない。
  • SceneObject 内の progression インスタンス変数経由で“最初に作られた Progressionインスタンス”が参照できる。



つづくかも。

*1:なんで null が代入されるのかは後で調べる