Flashのフレームワーク「Progression3」を始めてみよう!

第5回 Progression3でWebサイトを作る(後編)

この記事を読むのに必要な時間:およそ 8.5 分

initObjectで値を渡す

シーンクラスのインスタンスを作成している箇所で,シーンクラスのパラメータにシーン名以外のパラメータを設定しています。

var infoTextScene:InfoTextScene = new InfoTextScene("information" + i, { container:_page, infoNum:i } );

Progressionで用意されているクラスはinitObjectという初期化用のパラメータを持っています。それを利用してコンテナの参照と連番の番号を渡しています。以下InfoTextSceneのコンストラクタです。

public function InfoTextScene( name:String = null, initObject:Object = null ) 
{
  super( name, initObject );
  //initObjectの値を受け取る
  //コンテナの参照
  _container = initObject.container;
  //番号
  _infoNum = String(int(initObject.infoNum) + 1);

  //番号に応じたクラスを取得
  var txtInfo_Class:Class = Class(getDefinitionByName("myproject.texts.Txt_Info" + _infoNum));
  //インスタンスの作成
  _txtInfo = new txtInfo_Class();
  _txtInfo.x = 50;
  _txtInfo.y = 120;
}

initObjectで得た値を利用し,シーンの作成を行っています。

もちろんsetter,getterで値を受け渡す事も出来ますが,折角用意されているのですからinitObjectを利用しない手はありません。

コマンドのシリアルリストとパラレルリスト

再度InformationScene.asの_onLoadメソッドのコマンド内に登録しているfunction内を見てください。

//コマンド登録の為のパラレルリストの作成
var pList:ParallelList = new ParallelList();		
~
for (var i:int = 0; i < 4; i++) {
~
  pList.addCommand(
    //パラレルリスト内にシリアルリストの作成
    [
    new Prop(btn_Info_Title, { x:50, y:(i * 20) + 30 } ),  
    new AddChild(_page, btn_Info_Title)
    ]
  );
}
insertCommand(pList);

コマンドのシリアルリスト,パラレルリストの説明は連載第2回で軽く触れましたが,上記コードはコマンド実行の応用編です。

function内でパラレルリストコマンドを作成し,実行されているコマンドに差込む事でそのパラレルリストコマンドを実行させています。 さらにパラレルリスト内のコマンドをシリアルリストに変換しています。

シリアルリスト内のコマンドを[ ]で括るとパラレルリストに,パラレルリスト内のコマンドを[ ]で括るとシリアルリストに変換されます。

今回は"各ボタンの設置は同時に行いたいのだけれど,各ボタンはパラメータを設定してから設置したい"という処理を実現させるため,このようなコマンドを作成しました。

上手くコマンドリストを扱うことにより,もっと複雑な処理フローも実現できます。

各キャストオブジェクトの動作を調整する

シーンやボタン等キャストオブジェクトの配置が終了したら,最後に各キャストオブジェクトに動きを付けてあげます。

今回はテキストが表示される際,上から下に少しスライドさせて,退出時は逆の動きをするようにしてみました。

以下は,Txt_Info1.asの_onCastAddedメソッドと_onCastRemovedメソッドの部分です。


protected override function _onCastAdded():void 
{
  addCommand(
    // 任意のコマンドを記述してください。
    new Prop(this, { alpha:0 } ), 
    new DoTweener(this, { y:y + 10, alpha:1, time:0.5 } )
  );
}
protected override function _onCastRemoved():void 
{
  addCommand(
    // 任意のコマンドを記述してください。
    new DoTweener(this, { y:y - 10, alpha:0, time:0.5 } )
  );
}

これでInformationシーン側の説明を終了します。実はもっとクラスファイルをまとめてしまうことも可能ですが,今回は割愛します※1⁠。

※1
ヒント:各テキストを個々のキャストオブジェクトクラスにしないで,一つのキャストオブジェクトクラス内で各テキストのムービークリップまたはビットマップデータを設置するようにします。

図3 完成したInformationシーン

図3 完成したInformationシーン

著者プロフィール

楢山哲弘(ならやまのりひろ)

3年前に上京してきた北海道出身のFlasher。

開発スピードを上げるため,Progressionに傾倒中。そのため,ブログではProgressionについての言及が多くなっている。

URLhttp://narayama.heteml.jp/