MacromediaのDirectorについて質問です。swf(Flashムービー)をキャストメンバーに読み込み5フレームに配置し再生しています。5フレーム目にくるとgo the flameの記述でムービーを最初から終わりまで再生するのですが当然ムービーの最後で一時停止した状態で終わってしまいます。ムービーが再生し終わると指定のマーカーへ移動させたいのですがLingoでの記述はどのようになるのでしょうか?初歩的な質問かと思いますがDirectorを扱うのが初めてで時間も無いので困っています。どなたか教えていただきたいと思います。

回答の条件
  • 1人5回まで
  • 登録:2006/06/11 14:07:28
  • 終了:2006/06/13 20:32:02

ベストアンサー

id:onokun No.2

onokun回答回数40ベストアンサー獲得回数22006/06/12 21:29:25

ポイント50pt

Directorに貼り付けたFlashの再生が終わったら、次の指定したマーカーのフレームへ飛ぶようにしたいわけですね?

その場合は、Flashの再生の長さ分Direcotor上での長さを調整するよりも、Flashの再生が終わったら、次のマーカーに飛ぶという条件処理を書くほうがよいと思います。

Directorのスコアで流れる時間と、そこに貼り付けたFlashの中のフレームの再生の時間の流れはまったく関係無いのです。

そのため、1分半の長さの再生時間を持つFlashでもDrectorのスコア上では、極端な話1フレームだけ配置しておけばよいのです。

ですから、Flashの配置は、配置した当初の10フレームのままでかまわないと思います。

ただ、Flashが再生されていても、Director側のフレームが進んでしまって、Flashの再生が終わる前にFlash自体がステージから消えてしまってはいけないので、以下のような条件のスクリプトを書きます

①条件:Flashの再生が続いている時→処理:「go to the frame」でFlashのあるフレームに静止してFlashの再生が終わるのを待つ

②条件:それ以外の場合(Flashの再生が終わった時)→処理:「go to frame "マーカー名"」で次に再生すべきマーカーのフレームへジャンプする

仮に、Flashをスコアの一行目に配置している場合(sprite(1))、上記の処理を実際に記述すると次のようになります。

(記述する場所は、Flashの配置された最後のフレームのスクリプト辺りに書きます)

on exitFrame me

if sprite(1).playing then

go to the frame

else

go to frame "飛び先のマーカー名"

end if

end

これと同じようなことが以下にも書いてありますから、参考にしてください。

http://www.gac.jp/article/index.php?stats=question&category=20&i...

ただし、配置したFlashが永遠に再生が終わらないようなものの場合(ループしているなど)は、上記の①の条件から永遠に抜け出せなくなるので、このやり方ではうまくいきません。

Flashをちゃんと決まったところで再生が止まるように直すなど別の対応が必要になります。

id:moks

回答ありがとうございます。非常に分かりやすくまさにコレといった回答でした。試しに動作確認したところ正常に動作しました。ですが1点問題が発生しています。支給されたSWFですが最終フレーム到達後も3秒程度BGMが流れ続けています。その為教えていただいた制御では確かにマーカーへジャンプするのですが最後のBGMがカットされてしまいます。この場合timeoutlength等で指定時間後にタイムアウトさせるしかないでしょうか?またまた質問で申し訳ないですがご存知でしたら教えていただきたいと思います。

2006/06/12 23:03:03

その他の回答(2件)

id:onokun No.1

onokun回答回数40ベストアンサー獲得回数22006/06/12 00:50:37

ポイント50pt

指定したフレーム(この場合、ムービーの一番最後のフレーム)で「go to the frame」と指定すると、そのフレームで再生は停止します。

特定のフレームに飛ばしたい場合は

「go to frame 1」

などとすると、指定したフレーム(この場合、スコアの一番先頭の1フレーム目)に飛びます。

また、スコアの一番上の帯みたいなところをクリックすると、新規にマーカーが追加できます。

仮にマーカーの名前を「マーカー1」とした場合

「go to frame "マーカー1"」

とすると、同じ名前のマーカーに飛びます。

フレーム制御をする場合、フレーム番号より、マーカーを指定した方が、後でマーカーの位置を動かすだけで飛び先が調整できるのでいいですね。

ただ、貼り付けたFlashの動き自体の制御をDirectorからするという話であれば、またちょっと違ってくると思います。

id:moks

詳しい解説ありがとうございます。おかげでマーカーへの動きは理解できました。最後のフレームの箇所で質問ですがキャストメンバに読み込んだSWFをステージに配置すると10フレームの長さで配置されてしまいます(実際のムービーは1分半程度)。この状態ではムービーの一番最後のフレームがどれなのか分かりません。1分半の長さだけ手動で伸ばして最後のフレームに記述すれば良いのですがちょっと手間です。SWFの長さ通りにステージ上に配置する方法はあるのでしょうか?

2006/06/12 20:47:02
id:onokun No.2

onokun回答回数40ベストアンサー獲得回数22006/06/12 21:29:25ここでベストアンサー

ポイント50pt

Directorに貼り付けたFlashの再生が終わったら、次の指定したマーカーのフレームへ飛ぶようにしたいわけですね?

その場合は、Flashの再生の長さ分Direcotor上での長さを調整するよりも、Flashの再生が終わったら、次のマーカーに飛ぶという条件処理を書くほうがよいと思います。

Directorのスコアで流れる時間と、そこに貼り付けたFlashの中のフレームの再生の時間の流れはまったく関係無いのです。

そのため、1分半の長さの再生時間を持つFlashでもDrectorのスコア上では、極端な話1フレームだけ配置しておけばよいのです。

ですから、Flashの配置は、配置した当初の10フレームのままでかまわないと思います。

ただ、Flashが再生されていても、Director側のフレームが進んでしまって、Flashの再生が終わる前にFlash自体がステージから消えてしまってはいけないので、以下のような条件のスクリプトを書きます

①条件:Flashの再生が続いている時→処理:「go to the frame」でFlashのあるフレームに静止してFlashの再生が終わるのを待つ

②条件:それ以外の場合(Flashの再生が終わった時)→処理:「go to frame "マーカー名"」で次に再生すべきマーカーのフレームへジャンプする

仮に、Flashをスコアの一行目に配置している場合(sprite(1))、上記の処理を実際に記述すると次のようになります。

(記述する場所は、Flashの配置された最後のフレームのスクリプト辺りに書きます)

on exitFrame me

if sprite(1).playing then

go to the frame

else

go to frame "飛び先のマーカー名"

end if

end

これと同じようなことが以下にも書いてありますから、参考にしてください。

http://www.gac.jp/article/index.php?stats=question&category=20&i...

ただし、配置したFlashが永遠に再生が終わらないようなものの場合(ループしているなど)は、上記の①の条件から永遠に抜け出せなくなるので、このやり方ではうまくいきません。

Flashをちゃんと決まったところで再生が止まるように直すなど別の対応が必要になります。

id:moks

回答ありがとうございます。非常に分かりやすくまさにコレといった回答でした。試しに動作確認したところ正常に動作しました。ですが1点問題が発生しています。支給されたSWFですが最終フレーム到達後も3秒程度BGMが流れ続けています。その為教えていただいた制御では確かにマーカーへジャンプするのですが最後のBGMがカットされてしまいます。この場合timeoutlength等で指定時間後にタイムアウトさせるしかないでしょうか?またまた質問で申し訳ないですがご存知でしたら教えていただきたいと思います。

2006/06/12 23:03:03
id:onokun No.3

onokun回答回数40ベストアンサー獲得回数22006/06/13 00:36:25

ポイント50pt

Flashのアニメーションとサウンドが同期していない場合ですが、

映像と音はもともと分かれているものなので、仮にFlashの作成環境で映像フレームぴったりに音の再生が終わるように作られていても、

再生環境などによっては、映像と音にずれが生じるものです。

こればかりはある程度避けられませんが、Flashの内容が修正できるのであればこの問題を軽減する方法はあります。

まず、Flash側で指定されているBGMのプロパティの同期という項目を「イベント」から「ストリーミング」に変更します。

これによって、フレーム再生終了以降、BGMが再生されなくなります。

しかし、これではBGMが途中で切れてしまうことにもなるので、結果的には現在のDirector状態とあまり変わりません。

あとは、Flashのアニメーション側のフレームを若干伸ばす(3秒分程度)、

BGMのプロパティの効果の項目で「フェードアウト」を設定して、BGMの終わり部分の音を早めに小さくするようにするなど対応するところでしょうか(BGMがループする場合など都合が悪いが)。

これ以外では、Director側で、Flashの再生終了後一定時間(3秒くらい)待ちを入れてから飛ばすとかですが、

でも、最近DirectorをつかっていないのでLingoが思い出せないので、ウェイトを入れる方法などすぐに出てきません。

私だったら、②の再生終了後の処理部分を「go to the frame + 1」として、停止していた位置以降のフレームにそのまま移動するようにして、それ以降の部分までFlashのフレームを3秒分長く伸ばして、その余分な3秒の再生が終わったところであらためて目的のマーカーへ飛ばしますかね。

だいぶ手抜きっぽいですが、キレイに見えるコンテンツも最後は、裏側で細かい調整するなどの地道な努力が重要ということでしょうか・・・

id:moks

回答ありがとうございます。そういう概念とは知らず大変参考になりました。素人の分かりにくい質問に最後までお付き合いいただき助かりました。上記の方法にて製作しようと思います。ありがとうございました。

2006/06/13 20:31:00

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません