フレームとgotoを利用した画面遷移
画面遷移とは
ゲームなどでは, 開始画面, ゲーム本編, エンディングのように, 複数の「画面」が用意されることがあります. さらに, ゲーム内の「面」や「ステージ」も別の「画面」と思いたいことがあります. これを Flash Lite で実現するには, 物体の生成と消滅のように, 画面上の各要素を生成/消滅させる, 表示/非表示するようにすればいいのです.
しかし, Flash IDEのドローツールでステージ上にグラフィックスを作り込んだ場合など, このやり方が精神的によくない場合もあります. 「別の画面に行く」と考えた方が頭が整理される場合があります. それには, Flash Lite 1.0 の遺物とも言える, フレーム間の遷移が役に立つこともあります. ActionScript 3.0 ではこの仕組みは使いにくくなっています.
次のサンプルを通してみてみましょう.
- 空白のtestgoto.flaを用意します.
- 1,5,10フレームをキーフレームにします. プロパティ上でフレームラベルを設定できるので, それぞれ, "frame_start" "frame_game", "frame_end" としてみましょう.
- フレーム frame_start にボタンを置き, インスタンス名を "start_button" とします. フレームアクションでtestgoto_start.asをincludeします.
- フレーム frame_game に何らかの(移動したらわかるような)シンボルをインスタンス化し, インスタンス名を "rect" とします. フレームアクションでtestgoto_game.asをincludeします.
- フレーム frame_end に, このフレームに来たとわかるような何らかのMovieClipを置きます. フレームアクションでtestgoto_end.asをincludeします.
stop();
startbutton.onPress=function(){
_root.gotoAndPlay("frame_game");
};
stop();
と書かないと, 次のフレームを再生してしまいます. このようにして, ある条件下でのみ別のフレームに進むようにします.
_root
とは, タイムラインにキーフレームを定義した, すべての親となるMovieClipを意味します.
stop();
rect.onEnterFrame=function(){
this._y++;
if( this._y>200 ){
_root.gotoAndPlay("frame_end");
}
}
testgoto_end.as
stop();
ここにもstop();
と書かないと, 最初のフレームに戻ってループ再生してしまいます
stop();
を書かないで, このキーフレームおよびその後でTweenをすることもありえます.
これまで, 先頭のフレームだけにフレームアクションをincludeし, stop()
は使っていませんでしたが, いってみればその1フレームをループ再生していたようなものだったのです.