[AS]progression 出発シーン、到着シーンのsceneIdを取得する方法”departedSceneId”,”destinedSceneId”

便利すぎて鼻血がでます。

prgressionで直接URLを入力されたときや、サイトマップなどから通常の遷移とは違うルートからシーンにたどり着いた場合、内部の処理(主に、通過するシーンの_onLoadイベント)を分岐させたいことがありました。

その際に便利なのが、出発シーン、到着シーンを取得できるプロパテイ。
出発シーン:departedSceneId
到着シーン:destinedSceneId

使い方は、SceneObjectを継承したクラスならこんな感じで取得できます。

trace("出発地:"+this.progression.departedSceneId);
trace("ゴール地:" + this.progression.destinedSceneId);

progressionインスタンスのプロパティってことですかね。
CastSpriteとかで取得したい場合は、まずprogressionインスタンスを取得しないとなので、こんな感じで取れました。(もっと簡単に取れそうだけど)

//まずは何かシーンインスタンスを取得しておいて、
var indexScene:IndexScene  = IndexScene(getSceneById("indexScene"));
//そのインスタンス経由でprogressionを取得する
trace(indexScene.progression.departedSceneId)
trace(indexScene.progression.destinedSceneId)

ちなみに(一番最初に)URLからアクセスした場合は、departedSceneIdはnullになるみたい。
リロードしたときも、departedSceneIdはnullになってました。
これでいろんな状況からのアクセスの条件分岐ができそう。

※追記、
もっと簡単にprogressionインスタンス取得できました。

//progressionインスタンスを取得
var prog:Progression  = getProgressionById("index");
//そのインスタンス経由でprogressionを取得する
trace(prog.departedSceneId)
trace(prog.destinedSceneId)

[AS]progression AddChildAt()でインデックスが境界外と怒られる場合

progressionのAddChidAt、順番無視して突っ込めるので便利ですが、たまに順番どおりにインデックス打たないと境界外エラーがでてました。
なんだこりゃと思った、普通のAddChildで逃げてたわけですが、理由がやっとわかったっぽい。

コンテナをSpriteじゃなくてCastSpriteにしてあげたらエラー無くなった

		public function Hoge( initObject:Object = null ) 
		{
			super( initObject );
			//メニュー用コンテナーを作る
			MenuContainer = new CastSprite();
			//MenuContainer = new Sprite();←Spriteだとだめっぽい
			
			//メニューを作る
			Menu00 = new Menu00();
			Menu01 = new Menu00();
			Menu02 = new Menu00();
			Menu03 = new Menu00();
			Menu04 = new Menu00();
		}
		protected override function _onCastAdded():void 
		{
			addCommand(
				//メニューをコンテナーに格納
				new AddChildAt(companyMenuContainer, Menu00, 10),
				new AddChildAt(companyMenuContainer, Menu01, 11),
				new AddChildAt(companyMenuContainer, Menu02, 2),
				new AddChildAt(companyMenuContainer, Menu03, 23),
				new AddChildAt(companyMenuContainer, Menu04, 44),
			);
		}

[AS]progression ページタイトルについて。

progressionのページタイトルについて。
ブラウザの上に表示される、アレですね。
SceneObjectのプロパティtitleに設定することでブラウザに反映されるとあります。
だがしかし読み込み直後はこれが表示されない。
なんか別のタイトルが表示されてます。

なんだろう、index.asとかになんか書いてあるのか?といろいろ調べまわり・・・
グーグル先生に聞いてみても質問が悪いのか教えてくれず・・・
Twitterでえらい人の一言で解決しました。
index.htmlのtitle属性の値でした。。。

最近SWFファイルしか作ってないから何だか根本的にダメダメだ。。。

[AS]progressionでpreloaderのインスタンスにアクセスする方法

教えてもらったこと。
index.asにて

MovieClip(stage.getChildAt(0))

でpreloader本体を指定可能。

例)
preloader.flaに、hoge1_mcとかhoge2_mcとか置いてあった場合。
index.asからhoge1_mcにアクセスするには、

MovieClip(stage.getChildAt(0)).hoge1_mc

でOK

[AS][?]progression addCommandのexecute()について

_onload(),_onInit(),_onCastAdded(),_onCastRemoved(),_onGoto()などのoverride系のメソッドの中のaddCommand()は、execute()無しで、自動的に実行されるみたい。

addCommand()はリスト(CommandList?)にコマンドを追加するメソッドで、色んなクラスに入っている。
が、しかし、
CommandListクラスのメソッドのaddCommand()と
SceneObjectクラスのメソッドのaddCommand()とでは
動作の意味が若干違うみたい。(ドキュメントに書いてあることが違うし)

[AS][?]progression ParallelListとかSerialListについて

まずはドキュメントのサンプルより

パラレルリストの中にパラレルリストを作って実行しているがメリットがわからない・・・

var list:ParallelList = new ParallelList();
list.addCommand(
new ParallelList( null,
new Trace("この Trace コマンドは同時に実行されます。" ),
new Wait( 1000 ),
new Trace( "この Trace コマンドは同時に実行されます。" ),
new Wait( 1000 ),
new Trace( "この Trace コマンドは同時に実行されます。" )
);
list.execute();

コマンド内に書くとexecute();無しでも自動で実行されるのでシンプルな感じ
↓これで上と同じ意味になってるっぽいけど厳密には違うのかしら?

addCommand(
new ParallelList( null,
new Trace( "この Trace コマンドは同時に実行されます。" ),
new Wait( 1000 ),
new Trace( "この Trace コマンドは同時に実行されます。" ),
new Wait( 1000 ),
new Trace( "この Trace コマンドは同時に実行されます。" )
)
);

[AS][?]progressionでのprogression.containerについて

gihyoでのプログレッション特集4のサンプルでの疑問点

各シーンの閉じるボタンを表示リストに追加する際に、各シーンに割り当ててるページ(CastSprite)ではなく、SceneObject自体に追加している。
これは、閉じるボタンの戻り先を設定をする際、SceneObjectじゃないと、sceneId:progression.root.sceneIdが使えないから・・・でいいののか?
(CastSpriteはprogressionプロパティをもっていないので)

それでも、CastSpriteに閉じるボタンをおきたいときは、
progression.root.sceneIdをtraceすると中身は”/index”だったので、、、
var sId:SceneId = new SceneId(“/index”);とSceneIdのインスタンスを用意して
sceneId:sId;
としてあげればOKでした。