HOME MENU
 
Flash ActionScript Helper
シーン利用時の注意点
最終更新日: 02/02/06

フレーム番号の問題

Flashには、ローディング画面、導入部、エンディングなど、内容ごとに異なるタイムラインで作成可能なシーンというものが存在します。メインタイムライン(_root)だけに付加された機能ですが、作成中の追加、削除、複製、入れ替えができ、とても重宝します。

しかし、ActionScript から見ると、シーンはやっかいな存在です。
オーサリング時にはシーンには独立したタイムラインがあり、フレーム番号は各シーンごとに1から付けられています。ですが、swf ファイルに書き出されるときには、すべてのシーンが [ シーン ] パネルに表示される順番どおりに連結されて、ひとつのメインタイムラインになってしまうのです(下図参照)。

[ シーン ] パネル  
[ シーン ] パネル

ここで問題となるのがフレーム番号です。フレーム番号はシーン編集時に表示されていたものではなく、メインタイムラインの連続した番号になります。たとえば、上の例では、シーン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次のシーンの先頭フレームに移動し、再生ヘッドを停止します。

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.gotoAndPlayMovieClip.gotoAndStopMovieClip.prevFrameMovieClip.nextFrameを使用しましょう。ただし、前述のとおり、シーンではフレーム番号の把握がむずかしく指定には適していません。そこで、引数には、フレームラベルを指定するようにしましょう。



・関連項目

ムービークリップのフレームの移動
フレームラベル


HOME MENU ページTOPへ