最終更新日:
02/02/06
フレーム番号の問題
Flashには、ローディング画面、導入部、エンディングなど、内容ごとに異なるタイムラインで作成可能なシーンというものが存在します。メインタイムライン(_root)だけに付加された機能ですが、作成中の追加、削除、複製、入れ替えができ、とても重宝します。
しかし、ActionScript から見ると、シーンはやっかいな存在です。
オーサリング時にはシーンには独立したタイムラインがあり、フレーム番号は各シーンごとに1から付けられています。ですが、swf ファイルに書き出されるときには、すべてのシーンが
[ シーン ] パネルに表示される順番どおりに連結されて、ひとつのメインタイムラインになってしまうのです(下図参照)。
![[ シーン ] パネル](graphics/scenepanel.gif) |
|
[ シーン ] パネル
|
ここで問題となるのがフレーム番号です。フレーム番号はシーン編集時に表示されていたものではなく、メインタイムラインの連続した番号になります。たとえば、上の例では、シーン1、シーン2ともに5フレームですが、swf
に書き出された時点でトータル10フレームのタイムラインとなり、シーン2のフレーム1はフレーム6になります。
これによって、2つの問題が発生します。
まずひとつめ。通常、ローディング画面では、指定したフレーム番号まで読み込まれたどうかを判断して、ループしたり先に進めたりします。この際、指定するフレーム番号がオーサリング時に把握しづらい点です。シーンの入れ替えや差し替えが発生したときには、その度に、フレーム番号を計算し直して修正しなければなりません。
もうひとつは、同様の理由によって、フレーム移動用メソッド( Movieclip.gotoAndPlay など)の引数として、フレーム番号を指定しづらい点です。これに関しては、キッパリとあきらめ、フレームラベルを使用することをお勧めします。
| |
●[ (7) ] ボタンのボタンアクション
on ( release ) {
this.gotoAndPlay( 7 );
}
●[ (2) ] ボタンのボタンアクション
on ( release ) {
this.gotoAndPlay( 2 );
}
|
|
●ソースファイル:scenegoto.lzh(11.6
KB)
|
|
上のムービーは各5フレームの2つのシーンからなっています。
シーン1には [ (7) ] ボタン(ボタンアクション:this.gotoAndPlay(7);)が、シーン2には [ (2)
] ボタン(ボタンアクション:this.gotoAndPlay(2);)が配置してあります。
ボタンをクリックすると、2つのシーンに連続したフレーム番号が振られていることが確認できます。
|
シーンの移動
ActionScript には、シーンの移動用関数(アクション)が用意されています。prevScene と nextScene の2つです。
名前のとおり、prevScene はひとつ前のシーンの先頭フレームに、nextScene
は次のシーンの先頭フレームに移動し、再生ヘッドを停止します。
これらの関数は、決して使い勝手のいいものではありません。
シーン移動後に再生したい場合は、シーンの先頭フレームのフレームアクションに this.play(); を記述しなければなりませんし、先頭フレーム以外に移動することもできません。
そして、もっとも大きな問題は、これらの関数はメインタイムライン(_root)上でのみ使用可能で、他のムービークリップ上では使用できないことです。これは致命的です。
下のムービーを見てください。上のムービーの改良版です。シーン1には[ nextScene() ] ボタン(ボタンアクション:nextScene()
;)を2つ、シーン2には[ prevScene() ] ボタン(ボタンアクション:prevScene() ;)を2つ配置しています。各シーンとも右のボタンはメインタイムラインに直接、左のボタンはムービークリップの入れ子として配置しています。
ボタンをクリックして、動作を確認してください。各シーンとも右のボタンは正常に機能しますが、左のボタンは機能しません。
| |
●[ nextScene() ] ボタンのボタンアクション
on ( release ) {
nextScene() ;
}
●[ prevScene() ] ボタンのボタンアクション
on ( release ) {
prevScene() ;
}
|
|
●ソースファイル:nextprev_scene.lzh(13.5KB)
|
こんな不便な関数はさっさと忘れて、使用しないようにしましょう。
swf に書き出されるとひとつのタイムラインになるのですから、通常のフレーム移動と同じと考えればよいのです。MovieClip.gotoAndPlay、MovieClip.gotoAndStop、MovieClip.prevFrame、MovieClip.nextFrameを使用しましょう。ただし、前述のとおり、シーンではフレーム番号の把握がむずかしく指定には適していません。そこで、引数には、フレームラベルを指定するようにしましょう。
・関連項目
ムービークリップのフレームの移動
フレームラベル
|