フレームとgotoを利用した画面遷移

Time-stamp: "2011-12-15 Thu 10:33 JST hig"

画面遷移とは

ゲームなどでは, 開始画面, ゲーム本編, エンディングのように, 複数の「画面」が用意されることがあります. さらに, ゲーム内の「面」や「ステージ」も別の「画面」と思いたいことがあります. これを Flash Lite で実現するには, 物体の生成と消滅のように, 画面上の各要素を生成/消滅させる, 表示/非表示するようにすればいいのです.

しかし, Flash IDEのドローツールでステージ上にグラフィックスを作り込んだ場合など, このやり方が精神的によくない場合もあります. 「別の画面に行く」と考えた方が頭が整理される場合があります. それには, Flash Lite 1.0 の遺物とも言える, フレーム間の遷移が役に立つこともあります. ActionScript 3.0 ではこの仕組みは使いにくくなっています.

次のサンプルを通してみてみましょう.

  1. 空白のtestgoto.flaを用意します.
  2. 1,5,10フレームをキーフレームにします. プロパティ上でフレームラベルを設定できるので, それぞれ, "frame_start" "frame_game", "frame_end" としてみましょう.
  3. フレーム frame_start にボタンを置き, インスタンス名を "start_button" とします. フレームアクションでtestgoto_start.asをincludeします.
  4. フレーム frame_game に何らかの(移動したらわかるような)シンボルをインスタンス化し, インスタンス名を "rect" とします. フレームアクションでtestgoto_game.asをincludeします.
  5. フレーム frame_end に, このフレームに来たとわかるような何らかのMovieClipを置きます. フレームアクションでtestgoto_end.asをincludeします.
testgoto_start.as

stop();
startbutton.onPress=function(){
	_root.gotoAndPlay("frame_game");
};

stop();と書かないと, 次のフレームを再生してしまいます. このようにして, ある条件下でのみ別のフレームに進むようにします.

_rootとは, タイムラインにキーフレームを定義した, すべての親となるMovieClipを意味します.

testgoto_game.as

stop();
rect.onEnterFrame=function(){
	this._y++;
	if( this._y>200 ){
		_root.gotoAndPlay("frame_end");
	}
}
testgoto_end.as

stop();

ここにもstop();と書かないと, 最初のフレームに戻ってループ再生してしまいます

stop();を書かないで, このキーフレームおよびその後でTweenをすることもありえます.

これまで, 先頭のフレームだけにフレームアクションをincludeし, stop()は使っていませんでしたが, いってみればその1フレームをループ再生していたようなものだったのです.

課題

このサイトのコンテンツ

QRcode to hig3.net

https://hig3.net