AS2toAS3
前回もちょこっと書いたけど、AS2コーディングされているflaファイルをAS3に再コーディングした。
タスクはだいたいこんな感じ。
- _xとか_yとかプロパティのアンダースコアをとる
- onPressとかonEnterFrameとかイベントハンドラを書き換える
- var foo = "string" とかの型宣言を指定する
- function bar(hoo){}とかの引数と戻り値を指定する
- xml周りの処理を書き換える
- _global変数を書き換える
問題は5番と6番。
まず5番だが、AS2だとXMLクラスで
idMap["foo"]
を使っていたので、全部descendants().(attribute("id") == "foo")
に書き換え。そして6番。この部分は単純にコーディングだけの問題ではなく設計にも関わってくるので、色々考えた結果デザインパターンで言うところのシングルトンモデルのクラスを一つ用意することにした。
具体的にはGlobalと言うそのまんまなクラスを作って、インスタンスを静的メンバとして登録。これでどこからでも参照可能にする。Globalにはその他の必要なプロパティを色々定義しておく。各タイムラインからはこんな感じで呼び出し。
trace(Global.instance.rootPath); // http://exsample.com/
それと、シングルトンモデルとしては反則かもしれないけど、
一度だけnew Global()が必須で、その際にサイトルートやxmlパスなど色々引数を指定する。でxmlデータもGlobalが勝手に取得して
Global.instance.dataXML
として参照可能にする。初めはもっとシンプルに静的メンバだけ使って_globalの代替えにしようかと思ったけど、コードの再利用性とかを考えるとこっちの方が良さそうな気がする。