2009/12/02 | 0:47 am
Progression でクロスフェード
久々に Progression 使ってサイト構築したときの Tips
Progression でのシーンの移動の際、通常は _onGoto() と _onInit() 内にある addCommand() の2つの処理を待つのですが、
どーしてもクロスフェードが必要になった場合の処理。
SerialList を static な変数として生成しておいて、都度アクセスするのが一番効率良いやり方らしいス。
(自分確認ではなく開発者本人がおっしゃってたので、大丈夫かと。)
やり方はいたって簡単。
IndexScene と ChildScene の _onInit と _onGoto の addCommand() での処理で静的な変数として生成した SerialList を呼ぶ。
(注:そのままだと addCommand は SerialList のためクロスフェードしないので、ParallelList にしておく必要アリ)
-IndexScene.as
public static var customCommands:SerialList = new SerialList(); // ← これ!
public var page:IndexPage;
/**
* コンストラクタ
*/
public function IndexScene() {
addScene( new ChildScene( "child" ) );
page = new IndexPage();
page.alpha = 0;
}
/**
* シーンオブジェクトが目的地だった場合に、到達した瞬間に送出されます。
* このイベント処理の実行中には、addCommand() メソッド、及び insertCommand() メソッドによるコマンドの同期処理が行えます。
*/
protected override function _onInit():void {
// 実行したいコマンドを登録します。
addCommand(
new ParallelList( null,
IndexScene.customCommands, // ← ここで実行。初回は中身が空なので何も起きませぬ。
new SerialList( null,
new AddChild( progression.container, page ),
new DoTweener( page, { alpha:1, time:2 } )
)
),
function():void {
IndexScene.customCommands.clearCommand( true ); // ← クロスフェード後に中身をクリアしとく
}
);
}
/**
* シーンオブジェクトが出発地だった場合に、移動を開始した瞬間に送出されます。
* このイベント処理の実行中には、addCommand() メソッド、及び insertCommand() メソッドによるコマンドの同期処理が行えます。
*/
protected override function _onGoto():void {
IndexScene.customCommands.addCommand( // ← ここでは RemoveChild しないで、customCommands に登録だけしておく
new DoTweener( page, { alpha:0, time:2 } ),
new RemoveChild( progression.container, page )
);
// 実行したいコマンドを登録します。
addCommand(
);
}
下階層のシーンでも基本的に処理は一緒。
-ChildScene.as
/**
* シーンオブジェクトが目的地だった場合に、到達した瞬間に送出されます。
* このイベント処理の実行中には、addCommand() メソッド、及び insertCommand() メソッドによるコマンドの同期処理が行えます。
*/
protected override function _onInit():void {
// 実行したいコマンドを登録します。
addCommand(
new ParallelList( null,
IndexScene.customCommands, // ← ここで実行。IndexScene の _onGoto() で設定したコマンドが同時に実行されます。
new SerialList( null,
new AddChild( progression.container, page ),
new DoTweener( page, { alpha:1, time:2 } )
)
),
function():void {
IndexScene.customCommands.clearCommand( true ); // ← クロスフェード後に中身をちゃんとクリアしとく
}
);
}
/**
* シーンオブジェクトが出発地だった場合に、移動を開始した瞬間に送出されます。
* このイベント処理の実行中には、addCommand() メソッド、及び insertCommand() メソッドによるコマンドの同期処理が行えます。
*/
protected override function _onGoto():void {
IndexScene.customCommands.addCommand( // ← このページの処理を登録
new DoTweener( page, { alpha:0, time:2 } ),
new RemoveChild( progression.container, page )
);
// 実行したいコマンドを登録します。
addCommand(
);
}
シーンの _onGoto() では、コマンドの登録だけして、
実際の処理は、遷移先のシーンの _onInit(() で実行させるって行程です。
この処理を全部のシーンで実行させるようにしておけば、全部のページ遷移でクロスフェードになります。
CATEGORY
POSTED
jam


COMMENT
0 Comment