• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Flash cs4 ランダム再生)

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

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

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

  • ベストアンサー
  • 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

専門家に質問してみよう