外部Flashムービーファイル


外部ムービーとは、swfAdvとは別にパブリッシュされたアニメーションFlashムービーやFlashアプリケーションを指します。
ゲーム内に動画を表示したい場合にも勿論ですが、swfAdvに無い機能や今から制作しようとするゲームにのみ特化した機能を
入れたい場合には、この外部Flashムービーを使うと便利です。

作り方

swfAdv内で使用するために特別な設定をする必要はありません。
普段のオーサリング通りにswfファイルへパブリッシュして下さい。
また、表示はswfAdvが行うので外部ムービーのHTMLファイルは必要ありません。

外部FlashムービーとswfAdvの連携機能

注意※模索中の機能につき、今後仕様が変更されるかもしれません。

読み込まれた外部FlashムービーとswfAdvは、それぞれ独立して動作しています。
これに、swfAdvから命令を発信し外部Flashムービーのアニメーション再生を制御したり、ムービー上のフォーム
インターフェースで取得した値をswfAdvに返す、等といった連携を行いたい場合は、外部Flashムービー側に
連携する機能を追加する必要があります。
swfAdv側には、シナリオファイルのMovieコマンドという形で外部Flashムービーへ命令を発信する機能がありまので
この受け皿をムービー側に用意すれば、双方のやりとりができるようになります。

具体的には、Movieコマンドにより外部Flashムービー内のsetFunction()という関数へ、Movieコマンドの要素値/属性値が
送信されるので、ムービー側にその関数をスクリプト記述します。
下記の例では、要素値をキーにして簡単なアニメーション再生制御をしています。

 例:外部Flashムービーの再生/停止制御をする

外部Flashムービーの1フレーム目に以下を記述する

/*
 * swfAdv Movieコマンド受信メソッド
 * 
 *   @param  command  :Movieコマンドの要素値/属性値が収められたObject
 */
function setFunction(command:Object):Void
{
  switch(command._nodeValue) //ノード値から処理を分岐する
  {
   case("ANIMATIN_PLAY"):
     //外部Flashムービーのアニメーションを再生する
     this.play();
     break;
   case("ANIMATION_STOP"):
     //外部Flashムービーのアニメーションを停止する
     this.stop();
     break;
   default:
     //未定義のコマンド
  }
}

  上記スクリプトを記述された状態でパブリッシュし、swfAdvに読み込む。
  シナリオファイルからは以下のコマンドを実行される。

  <movie action="send" id="1">ANIMATIN_PLAY</movie>  //アニメーション再生
  <movie action="send" id="1">ANIMATION_STOP</movie> //アニメーション停止


※補足:Movieコマンドの値は、属性値は属性名で、要素値は_nodeValueという名のプロパティで収められたObjectで受け取られます。


イベント終了通知

上項目で送信されたMovieコマンドが実行される間、swfAdvは待機状態となりシナリオは進行しません。
外部Flashムービーの動作が終わりシナリオを再開しても良い段階になったら、下記スクリプトを実行し
swfAdvへ終了した旨を通知します。

import mx.events.EventDispatcher;
EventDispatcher.initialize(this);

dispatchEvent({type:"onComplete", target:this ,param:[外部Flashムービーからの戻り値:Object型]});

終了通知の際には、paramプロパティでswfAdvに戻り値を渡すことができます。
swfAdvで受け取られた戻り値は、ローカル変数としてゲーム内に保持されます。

例:何らかの入力集計を行う外部Flashムービー内で取得した集計結果を元に、シナリオを分岐させる

○外部Flashムービーに記述するスクリプト
function setFunction(command:Object):Void
{
  switch(command._nodeValue)
  {
   case("getTotal"):
     var _total:int;
     ・
     ・
     ・
     集計処理をここに書く
     ・
     ・
     ・
     var ret:Object = new Object();
     ret.total = _total;
     dispatchEvent({type:"onComplete", target:this ,param:ret}});
     break;
   default:
     //未定義のコマンド
  }
}


○シナリオファイルに記述するコマンド
<movie action="send" id="1" param="[集計に必要なデータ等]">getTotal</movie>
<divergence>
 <select type="$total=>10">  //集計結果が10以上ならば
  ・
  ・
  分岐先シナリオを記述
  ・
  ・
 </select>
 <select type="default">    //その他
  ・
  ・
  分岐先シナリオを記述
  ・
  ・
 </select>
</divergence>
最終更新:2007年07月23日 14:29