Flash初心者のためのランダム再生の制御方法について

このQ&Aのポイント
  • Flash初心者です。ホームページ上でランダムにアニメーションを再生させたいです。アニメーションのタイムラインを作成し、ムービーシンボルとして配置します。ActionScriptを使用してランダムフレームを指定し、gotoAndStop()関数で制御します。ただし、現在は正しいコードを書けておらず、パブリッシュしたswfファイルが動作しません。
  • Flash cs4を使用しています。アニメーションを再生するためには、アニメーションのタイムラインを作成し、ムービーシンボルとして配置する必要があります。その後、ActionScriptを使用してランダムフレームを指定し、gotoAndStop()関数を使用して制御します。ただし、現在はコンパイルエラーが発生しており、正しいコードを書くことができていません。
  • Flash初心者です。ホームページ上で複数のアニメーションをランダムに再生させたいです。アニメーションのタイムラインを作成し、ムービーシンボルとして配置します。それぞれのムービーシンボルには別々のアニメーションを作成し、ActionScriptを使用してランダムなフレームを指定することで、ランダム再生を実現します。しかし、現在は正しいコードを書くことができず、アニメーションが再生されません。
回答を見る
  • ベストアンサー

Flash cs4 ランダム再生

Flash初心者です。 やりたいことはホームページ上でアニメーションを再生させる際に、複数パターンのアニメーションをページをリロードするたびにランダムに切り替えるということです。 Flashにてアニメーションのタイムラインを複数パターンつくり、ランダム再生をActionScriptで制御するものを作成したいと思います。 アニメーションのタイムラインを作成しムービーシンボルとしたものを複数作成し、それをシーン1のタイムラインにて各フレームに配置して、1フレーム目にActionScriptにてgotoAndStop(ランダムフレームの記述?);とすればいいのかなと思っているのですが、正しいでしょうか? 現状ではアニメーションのムービーシンボルは必要なパターンだけ作成しました。 シーン1のタイムラインに配置まではしたのですが、ActionScriptの記述が素人なものでさっぱりわかりません。 どなたか教えていただけませんか? 自分なりにやってみたのですが、ランダム関数(?)以前にgotoAndStop()すら思うようにいきませんでした。 Flashはcs4を使用しております。ActionScript3.0のプロジェクトにして添付画像のように1フレーム目に gotoAndStop(10); としてみたのですが、パブリッシュしたswf ファイルは真っ白のまま何も動いてくれません。 gotoAndstop(10); としてみたらstopせずにタイムラインを再生しているようで、各アニメーションの最初のフレームだけが切り替わるものになってしまいました。 ともにコンパイルエラー 1180:未定義である可能性が高いメソッドgotoAndstopの呼び出しです といわれます。 ActionScriptが2.0と3.0とどちらがいいのかもわかってない状態ですが、ご教授願います。

  • Flash
  • 回答数2
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • BlurFiltan
  • ベストアンサー率91% (1611/1754)
回答No.1

> gotoAndStop(10); > としてみたのですが、パブリッシュした > swf ファイルは真っ白のまま何も動いてくれません。 それは多分 SWF が 10 フレーム目までロードされるより前に gotoAndStop(10) のような無茶な動作をさせているため 再生ヘッドが変なところで止まってしまったためだと推測されます。 > gotoAndstop(10); > としてみたらstopせずにタイムラインを再生しているようで、 それは gotoAndstop の s が小文字になっているからです。 既存のスクリプトにそんな言葉は存在しません。 ActionScript 1.0 でも 2.0 でも 3.0 でも Flash Player 7 以上用の SWF をパブリッシュする場合 大文字小文字は区別されます。 Flash Player は SWF をロード再生するとき, SWF ファイルのロード完了は待たずに ロードされる端から再生される仕様になっているのです。 これをプログレッシブ再生と言いますが, 逆に言えばこの機能のお陰で「Now Loading...」のようなものも表示できるわけです。 (もしロードを完了してからしか再生しなければ「Now Loading...」も表示不可能となりますよね?) SWF がローカルPCにあるうちは まだロードは早い方ですが(それでもプログラムの実行速度よりはずっと遅い), ネットにあるともっともっとロードは遅くなります。 ですから ご質問に書かれている方法で行くとすると 見ることのない SWF のデータのロードまでしてから ランダムなフレームにジャンプするという 無駄なロード待ち時間と無駄なメモリが必要になってくるわけです。 したがって 根本的に考え方を変えて 各ランダムに再生されるコンテンツムービーは 別々の SWF として作成し そのうちのいずれかのランダムな SWF を 別の SWF(親SWF) からロード表示させる方が良いと思いますし また一般的だと思います。     任意のフォルダに 「main.swf」とそれを貼り付ける「main.html」を用意し その同じフォルダに ランダムに選ばれるコンテンツムービー 「cont0.swf」「cont1.swf」「cont2.swf」「cont3.swf」「cont4.swf」 の5つのファイル(合計7つ)を用意したとします。 全ての SWF の縦横サイズやフレームレートは全て等しいものとします。 また全ての SWF は Flash Player 10 用の ActionScript 3.0 設定でパブリッシュするものとします。 その場合の 「main.swf」を作成する FLA(main.fla) の メインのタイムラインの フレーム1 に書くスクリプト例です↓。 //------------------------------------------ //変数 rnd にランダムな 0~4 の整数を取得 var rnd:int = Math.floor(Math.random() * 5); //ランダムな URLリクエスト インスタンス url を作成 var url:URLRequest = new URLRequest("cont" + rnd + ".swf"); //SWF のローダーを用意 var ldr:Loader = new Loader(); //SWF のローダーにランダムな SWF をロード ldr.load(url); //このタイムラインに SWF のローダーを配置 this.addChild(ldr); //------------------------------------------ こんな感じで スクリプト以外は空の「main.swf」をパブリッシュしてもらえば ランダムな SWF ローダーができます。 なお, URLリクエストインスタンスに指示するURLの文字列は SWF(上の場合は「main.swf」)を起点としたパスではなく そのSWFを貼り付ける HTML を起点としたパスになりますから SWF と HTML が別フォルダにあって 相対パスで指示するときは注意してください。   === === === === === === === または, JavaScript がもし御得意であれば 各コンテンツムービーSWFを 直接 HTML にランダムに貼り付けるようにしても良いとは思います。 (そうすれば上記の main.swf のようなものは要りませんね。)

kotatsu315
質問者

お礼

早速の丁寧なご回答ありがとうございます。 まず考えていた方法が間違っていましたか。 プログレッシブ再生について理解できました。 ご教授いただいた方法にてテスト的に5つのSWFをランダム再生するSWFを作成してみたところ、望んでいたとおりのものができました。ありがとうございます。 JavaScriptを使った方法も調べてみます。 再度一点質問させてください。 >URLリクエストインスタンスに指示するURLの文字列は >SWF と HTML が別フォルダにあって >相対パスで指示するときは注意してください。 HTMLと同じ階層にSWFフォルダを作成し、その中に再生させたいcont.swfを入れる場合の記述は var url:URLRequest = new URLRequest("cont" + rnd + ".swf"); ↓↓↓ var url:URLRequest = new URLRequest("cont" + rnd + "SWF/.swf"); といった感じでよろしいのでしょうか? 知識が乏しいもので(HTMLとCSSの基礎を学んだ程度)、目的がはっきりあっても手段は何が適当なのかも解らずとりあえず手をつけてみた状況でした。勉強させていただきます。

その他の回答 (1)

  • BlurFiltan
  • ベストアンサー率91% (1611/1754)
回答No.2

#1です。 お礼の内容を拝見しましたが, HTML と同じ階層に SWF という名のフォルダを作成して, その中に再生させたい cont●.swf を入れる場合, 結論から書きますとスクリプトの2行目は, //ランダムな URLリクエスト インスタンス url を作成 var url:URLRequest = new URLRequest("SWF/cont" + rnd + ".swf"); のようになります。   上記スクリプトに関しての説明ですが URLRequest("SWF/cont" + rnd + ".swf") の ( ) 内だけを考えることにします。 上記 ( ) 内の rnd には 1行目のスクリプトよりランダムな 0~4 のいずれかの数値が代入されます。 ここでは仮に 3 という数値が代入されたものとします。 すると ( ) 内は "SWF/cont" + 3 + ".swf" となります。 「+」は数値の加算演算子であるとともに 文字列の連結演算子でもあります。 数値+数値 のような場合, 「+」は勝手に数値の加算演算子になりますが 文字列+数値 や 文字列+文字列 のような場合, 「+」は勝手に文字列の連結演算子になります。 "SWF/cont" + 3 + ".swf" の "SWF/cont" は 文字列 です。 次の 3 は 数値 です。 ちなみに次の ".swf" も文字列です。 したがってこの場合 「+」は勝手に文字列の連結演算子になって "SWF/cont" + 3 + ".swf" ↓↓↓ "SWF/cont3" + ".swf" ↓↓↓ "SWF/cont3.swf" という演算がなされることになります。 実際には rnd に 0~4 のいずれかの数値が代入されるわけですから "SWF/cont" + rnd + ".swf" の部分は "SWF/cont0.swf" "SWF/cont1.swf" "SWF/cont2.swf" "SWF/cont3.swf" "SWF/cont4.swf" のいずれかになるということになります。 そういうことです。

kotatsu315
質問者

お礼

再度ご丁寧な回答ありがとうございます。 勉強させていただきました。

関連するQ&A

  • Flash CS4 + ActionScript 3.0 で swf

    Flash CS4 + ActionScript 3.0 で swf ファイルを作成しました。 メインのタイムラインの 1 フレーム目に ActionScript で stop(); を 指定したのですが、swf 単体で再生(Adobe Flash Player 10で再生)して 確認したところでは問題なく 1 フレーム目で停止しますが、 swf を HTML に配置してブラウザで確認したところ、 ロード時にはメインのタイムラインがすべて再生されてしまいます。 これについての対処法はあるのでしょうか? 自分なりの調べて見つけた方法としては、 ↓こんな感じだったのですが、根本解決ではない気がするので、  何か良い方法があれば、教えてください。よろしくお願いします。 ・外部ファイルを読み込むだけの swf を作って、  実際に再生したい swf を UILoader に読み込む ・全部ムービークリップに入れてしまって、  メインのタイムラインには、そのムービークリップだけ配置する

    • ベストアンサー
    • Flash
  • Flash フレームを指定してムービークリップ再生

    ActionScript超初心者です。 よろしくお願いします。 ステージ上にボタン「A」「B」「C」を配置、 ボタン脇のスペースにムービークリップを配置、各ボタンで切り替え再生させたいと思っています。 2フレーム目に簡単なアニメーションのムービークリップ「animA」を、 3フレーム目に同様の「animB」4フレーム目に「animC」を配置し、 各ボタンon (release)で各ムービークリップの再生をしたいのですが うまくいきません。 どこにどのようなスクリプトを書けば良いか教えていただけないでしょうか。 よろしくお願いします。

    • ベストアンサー
    • Flash
  • FLASHでのロールオーバーについて

    こんにちは。 FLASHで、メニューボタンにマウスを乗せると別の領域に画像が表示される、というものを作りたいのですが、どうもうまくできません。 今やっている方法はこんな感じです。まずムービークリップで、1フレーム目を空白に、2フレーム目に表示する画像としたものを作り、インスタンス名をinfomationとして配置します。このシンボルの1フレーム目に、勝手に再生されないようstop(); を書いておきます。そしてメニューボタン(これも、アニメーションボタンにしたいのでムービークリップで作っています)に、以下のスクリプトを書きました。 on (rollOver) { with (infomation) { gotoAndStop(2); } } これで再生しますと、マウスをボタンに乗せても画像が表示されません。(ポインタの形状は変わりますので、ボタンとしては認識してくれているようなのですが・・・) この方法で、間違っているところや、あるいは もっとよい方法がありましたら、教えていただけませんでしょうか。 本やネットで調べたのですが、あまりにも初歩的な質問のためか?解決につながるようなものが見つかりませんでした。 どうぞよろしくお願いいたします。

  • flashのランダム再生

    flash8で質問です。 5つのswfをランダムに読み込み、 5番目までいったらまた、ランダムにはじめから再生したいです。 ランダムで5つまで再生終わったらはじめからループという考え方でいいのでしょうか? ***************************** 外部にswfが5つおいてあります。 (外部ムービーの名前は1.swf、2.swfのように数字の番号の名前ではありません。) ///main.fla/// 配列にして (1.swf、2.swf、3.swf、4.swf、5.swf)をランダムで取り出し、 .load_mcに読み込む。 ランダムに1~5までのムービーの再生が終わったらまた ランダム再生を繰り返す。 というようなflashを作りたいです。 どうすればいいでしょうか。

    • ベストアンサー
    • Flash
  • Flash 重複しないムービー再生とその後の処理について

    標題の件、似たようなケースは多く、質問もいろいろ寄せられているの ですが、どうしても自分のケースに応用できなくて質問させていただき ました。 バージョンは「Flash MX 2004」で、やりたいことは以下の内容です。 ------------------------------------------- (1)9つのムービークリップを重複しないようにランダムに再生。  (なので正確にはシャッフルになるのでしょうか。。) (2)全てのムービーを再生後、次のフレームへ移動します。 ------------------------------------------- 以上です。 現在、1フレーム目に“Math.random();”を使ってランダムな数を取得 し、2~10フレームまで任意のフレームへ移動するよう設定していま す。2~10フレームまでは各ムービーを1フレームずつ配置している 状態で、それぞれstop();を設定しています。 各ムービークリップの最後のフレームには“_root.gotoAndStop(1);”を 設定して再びランダムな数を取得するようにしていますが、これだと重複 してしまうし、なおかつループし続けます。 「重複せずに全ムービーを再生後、11フレームへ移行する」という処理 がどうしてもわからず、ここから先が行き詰まってしまいました。 Math.random();のメソッド自体が適切でないのかも知れませんが、それら もふまえて、ご伝授いただけますでしょうか。 よろしくお願いいたします。

    • ベストアンサー
    • Flash
  • FlashのActionScriptについて

    FlashのActionScriptについて Flash CS4(AS2.0)を使用 Flashに関しては初心者で、色々な参考書を見ている中で、 AkutionScriptの書き方に色々なパターンがあって分からなくなりました。 アクションを書き込む際、 (1)専用のActionScriptのフレームを作成してそこに書く (2)ボタンインスタンスに書く (3)対象のシンボルのフレームに書く 上記3つの方法はそれぞれどのような違いがあるのでしょうか?又、どのようにして 使い分けするのでしょうか?

  • FLASHの同一タイムラインで、複数のムービークリップを順に再生したい

    ムービークリップを複数作成しました。(名前を仮にa_mc, b_mc, c_mcとします。) このムービークリップを順に再生していきたいので、同一タイムライン上の 1フレーム目にa_mc 2フレーム目にb_mc 3フレーム目にc_mc と配置し、タイムラインの最後のフレームに this.stop(); とスクリプトを書きましたが、a_mcの再生が終わったところ(=1フレーム目)で停まってしまいます。 1フレーム目の後、2フレーム目以降(b_mcとc_mc)を続けて再生するには、どのようにすれば良いのでしょうか?

    • ベストアンサー
    • Flash
  • Flashのボタンオーバー

    Flash5を使用しています。 ボタンシンボルを作り、オーバーにムービーシンボルを配置して ボタンオーバーでアニメーションをするボタンを作成しました。 そこで問題が出てきました。 アニメーションは繰り返ししないように作ったつもりだったのですが、 クリックして離しても再びアニメーションしてしまうのです。 これをオーバーのみでアニメーションさせるにする方法ってないのでしょうか? わかる方いらっしゃいましたら教えてください。

  • 7秒後にフレーム5へ移動してムービークリップを再生

    はじめまして。 FLASH初心者です。 レイヤー1~5の5フレームごとにムービークリップを配置しています。 レイヤー1の1フレーム目に配置してあるムービークリップが再生されて、7秒後にレイヤー2の5フレーム目に配置してあるムービークリップを再生し、(レイヤー3~5も同様に…)レイヤー5に配置してあるムービークリップの再生が終わったら、また7秒後にレイヤー1のムービークリップが再生される…といったように繰り返すにはどのようなActionScriptにすればよいのでしょう? 色々、試行錯誤したのですがうまくいきません。 どなたか教えて頂けませんか? よろしくお願いします。

    • ベストアンサー
    • Flash
  • FlashCS5でwebサイト作成中のFlash初心者です

    FlashCS5でwebサイト作成中のFlash初心者です 言葉が間違っていたらすみません 今回からactionscript3.0を使用(以前は2.0使用)することにしました 「アイコンをマウスオーバーするとアクションが発生する」というボタンを作成したいのですが、 以前はボタンシンボルのオーバーフレームにムービーシンボルを入れるという方法で作成していました しかしミスだと思いますが3.0になってこの方法が出来なくなりました (ムービーを1回再生にするためのstop;がエラーになってしまった・・・) ボタンシンボルを作るよりActionscriptだけでボタンを作成する方が一般的なのでしょうか 勉強不足で申し訳ないです・・・

    • ベストアンサー
    • Flash

専門家に質問してみよう