Flash swfのランダム再生について

このQ&Aのポイント
  • Flash swfのランダム再生に関して質問させていただきます。使っているバージョンはFLASHCS3/AS2.0です。btnボタンをクリックすると、3種類のswfを連続でランダム再生したいのですが、うまくいきません。
  • 自分で試してみたところ、ボタンをクリックするとランダムに1つのswfが選択され、それを永遠に再生するだけになってしまいます。ここで、3種類のswfを3連続再生した後に再生を停止する方法もわかりません。
  • どうか、Flash swfのランダム再生について教えていただけないでしょうか?連続で3種類のswfをランダムに再生し、それを停止する方法が知りたいです。
回答を見る
  • ベストアンサー

Flash swfのランダム再生

こんにちは。今回はswfのランダム再生に関して質問させていただきます. 使っているバージョンはFLASHCS3/AS2.0です. たくさんのランダム再生に関する質問を参考に進めていたのですが,どうしても自分の理想通りにならないので質問させていただきました. やりたいこと. →btn というボタンをクリックして,mcに3種のswfを3連続ランダム再生したい. 自分で試してつくってみたところ,btnをクリックすると確かにランダムに3種のswfを選択しているようなのですが,選択した1種のswfを永遠に再生するだけになってしまいます.もちろんbtnをクリックするたびにランダムに再生してほしいのですが,3種のswfを3連続再生してほしいのです(重複可). 「3連続再生したあと実行をやめる」というASもわかりません. どうかご回答願います.

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

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

とりあえず, ActionScriptなどを離れて動作の流れを考えてみます。   ボタンがクリックされる       ↓   ------------------------------   ランダムな外部SWF(仮称A)をロードする   そしてカウント用変数の値を 1 にする       ↓   外部SWF(仮称A)がロード&再生される       ↓   外部SWF(仮称A)の再生が終了する   ------------------------------       ↓   ------------------------------   もしカウント用変数の値が3未満であれば   ランダムな外部SWF(仮称B)をロードする   そしてカウント用変数に1をプラスする       ↓   外部SWF(仮称B)がロード&再生される       ↓   外部SWF(仮称B)の再生が終了する   ------------------------------       ↓   ------------------------------   もしカウント用変数の値が3未満であれば   ランダムな外部SWF(仮称C)をロードする   そしてカウント用変数に1をプラスする       ↓   外部SWF(仮称C)がロード&再生される       ↓   外部SWF(仮称C)の再生が終了する   ------------------------------       ↓   後は何かしても良いし,しなくても良い。 ActionScriptを離れて別の言語を使うとしても, 流れはだいたい上のようになります。 一番難しく,場合によってはできない(不確定)な部分がありますが, それはどこかおわかりになりますか? 「3連続再生したあと実行をやめる」という部分ではありませんよ。 それは, 回数を指折り数えて3回になればそれ以上ロードしなければ良いだけです。 難しい,または不可能なのは次の部分です。   外部SWF(仮称A)の再生が終了する   外部SWF(仮称B)の再生が終了する   外部SWF(仮称C)の再生が終了する つまり, 「外部SWFの再生が終了するのを検知する」 という部分が最難関で場合によっては不可能です。 なぜ不可能な場合があるかと言うと, そもそも 「外部SWFの再生は終了しない」 ものもあるからです。 →例:アナログ時計やデジタル時計のSWF   例:HPでよく見るメニューなどナビゲーション系SWF 私は外部SWFの作成者ではありませんから, 外部SWFがどんなムービーなのか全くわかっていない状況です。 可能か不可能かなど私は判断できません。 外部SWFがそういうものではなく, _root(シーン1 などメインのタイムライン)を使った昔からある素朴なアニメーションである場合に限っては,  「最終フレーム到達=再生終了」 ですから,次のようにすればできます。 外部SWFをロードする親SWFと同じフォルダに 外部SWF「1.swf」,「2.swf」,「3.swf」があるものとします。 親SWF(親FLA)には, 「loadMC」 というインスタンス名を付けたムービークリップと 「loadBTN」 というインスタンス名を付けたボタンがあるものとします。 「loadMC」 や 「loadBTN」 が存在するフレームに, 次のように書けばそれなりのものができます。 ///////////////////////////////////////////////////////////////////// // カウント用変数 cnt の宣言 var cnt:Number; // 「loadBTN」クリック時の動作定義 loadBTN.onRelease = function():Void { // // このボタンのボタン機能を無効にする(重複クリック禁止策) this.enabled = false; // loadMC に ランダムな1~3.swf をロード loadMC.loadMovie((Math.floor(Math.random()*3)+1)+".swf"); // カウント用変数 cnt を 1 にする cnt = 1; // _root.onEnterFrame = function():Void { // loadMC の再生フレームが最終フレームに達した場合 if (loadMC._currentframe>1 && loadMC._currentframe == loadMC._totalframes) { // // もし cnt が 3 未満であれば if (cnt<3) { // loadMC に ランダムな1~3.swf をロード loadMC.loadMovie((Math.floor(Math.random()*3)+1)+".swf"); // カウント用変数 cnt に 1 をプラスする cnt++; } else { // loadMCから外部SWFをアンロード loadMC.unloadMovie(); // loadBTNボタンのボタン機能を有効にする loadBTN.enabled = true; // この onEnterFrame を削除 delete this.onEnterFrame; } } }; }; ///////////////////////////////////////////////////////////////////// 上のスクリプトにある,  // このボタンのボタン機能を無効にする(重複クリック禁止策)  this.enabled = false; とか,  // loadMCから外部SWFをアンロード  loadMC.unloadMovie(); とか,  // loadBTNボタンのボタン機能を有効にする  loadBTN.enabled = true; は,適当に勝手に付けてみただけです。 不要であれば取っても問題はないと思います。 > 3種のswfを3連続再生してほしいのです(重複可). ということですから重複はします。 重複しない確率は 2/9 です。 だいたいの場合(9回クリック中 7回ぐらい)は同じSWFが重複出没します。 繰り返しますが,上のことができるのは, 外部SWFが_rootのタイムラインを用いた素朴なアニメーションであって, なおかつ最後のフレームに到着することが「ムービー終了」である場合です。 アナログ時計などActionScriptで動かしたものに "限らず", ムービークリップ内のタイムラインを使ったアニメーションムービーであっても上のスクリプトは使えません。 また,_rootのタイムラインを用いたアニメーションであっても, 最終フレームに到達することなく途中のフレームで折りかえし再生したり, 途中のフレームでストップする場合は知りません。 「外部SWFの再生が終了するのを検知する」 ここがわからないと(どういう条件か明記されないと)本当は回答できないご質問です。 ------ ------ ------ ------ と以上のように書いてみましたが... > 3種のswfを揃える人物はFlash操作ができない人を想定 > 3種のswfをそろえるだけで3種3連続ランダム再生できるには > どうしたらいいでしょうか???? その条件では基本的に不可能ではないでしょうか。 どんな SWF をそろえられるかわかったものではありません。 ActionScript を使用したSWF などをそろえられてしまった場合は, ムービーの最後が検知できないどころか, 別の SWF にロードしたその時点で _root や Stage や _x _y などが変わりますから, 「表示されない」「動かない」「暴走する」「フリーズする」などのことは当たり前に起こります(起こらない方が稀)。 また 外部SWF のパブリッシュしたバージョンも, ロード親と一致させておかなければ変になって当たり前です。 ちなみに, 「1.swf」「2.swf」「3.swf」 を FlashPlayer7以下のSWFにパブリッシュして, メインのSWFをFlashPlayer8のSWFしたところ, 上のスクリプトを使っても, > 選択した1種のswfを永遠に再生するだけになってしまいます. これと同じ現象が起きました。 『3種のswfを揃える人物』 に,  「用意する SWF は 必ず _root のタイムラインを使用した最終フレームをムービー終了とするムービーであること。」  「また用意する SWF は FlashPlayer○ 用にパブリッシュしたSWFを使用すること。」 などと条件を付けておけば大丈夫なのかもしれませんが, 『Flash操作ができない人』 であれば, 上の条件は何のことかさっぱりわかりませんね。 外部JPEGロードだと,その辺は関係ないので楽です。 Flash素材でも, 外部JPEGをロードする素材ばかりで, 外部SWFをロードする素材というのは普通はありません。 外部SWFが予測できませんし,不具合が起こることは目に見えてわかります。

vamse77
質問者

お礼

まずは返事が遅くなったことをおわびします. ネットがしばらくつながらないトラブルに見舞われていました(汗) そして,たくさんのアドバイスありがとうございます!!! 教えてくださったスクリプトで大成功しました!!!!!! 自分でもこれを成功させるにはかなり多くの壁があるのは感じていたのですが,どうにか工夫して第三者にも使ってもらえるものをつくろうと制作している次第です. とっっっっても役立ちました.ありがとうございました.

その他の回答 (2)

  • suzuko
  • ベストアンサー率38% (1112/2922)
回答No.2

#1です。 補足ありがとうございます。が、今一つ理解できていません。 >3種のswfを揃える人物はFlash操作ができない人を想定して FLASHの操作は、私の示した方法でもbtnと言うボタンをクリックするだけですが? (前提がそう書かれていますよね) そして、アトランダムに1~6のSWFを表示させ、自動で最後に止める(つまりループさせない)と、言うことです。 >「3連続再生したあと実行をやめる」というASもわかりません. と、おっしゃっているので、簡単なスクリプトしか示しませんでした。 各swfに変数をつけて、最後にランダムに次を再生、ただし1度読み込んだswfは変数で判断して、再生しない。というASは、if文を書けばできます。

vamse77
質問者

補足

> A・B・Cのswfを各パターンでつないで、 と書かれた部分を私はFlashを用いて 「AAA」「ABB」「ABC」「ACC」「BBB」「CCC」 のswfを作るのかと解釈しました. しかしsuzukoさんがおしゃっていたのは, ASでこの6パターンにくくることを意味していたのでしょうか?? 理解が足らなくてすいません.

  • suzuko
  • ベストアンサー率38% (1112/2922)
回答No.1

A・B・Cのswfを各パターンでつないで、1~6として一番最後に this.stop(); とフレームにアクションを書く。

vamse77
質問者

補足

ご回答ありがとうございます。 その方法も考えたのですが、3種のswfを揃える人物はFlash操作ができない人を想定して制作しています。 ですから、3種のswfをそろえるだけで3種3連続ランダム再生できるにはどうしたらいいでしょうか???? suzukoさんにはせっかく簡潔にご回答いただいたのに、注文が多くて申し訳ないです。 どうぞよろしくお願いします。

関連するQ&A

  • 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
  • 別のSWFを操作

    お世話になっております。 質問させていただきます。 環境 ・Flash CS3 ・AS 2.0にて制作 まず下記のswfが同一ページにあったとします。 ・main.swf ・btn.swf この[btn.swf]を押したときに[main.swf]が2フレームまで進むようにする。としたら、どのようなasが必要でしょうか? 仕様上、[main.swf]の中に[btn.swf]の機能をもったmcを配置することは難しいのです。どうにかしてswfから別swfを操作したいのですが…。 やはりサーバに一回、情報送信とかしないとだめなのでしょうか…? 以上です。宜しくお願い致します。

    • ベストアンサー
    • Flash
  • Flash 外部swfの操作

    こんにちは. 環境は「Mac/CS3/AS1&2」です. 今回は,外部swfファイルの操作に関して質問させていただきます. 親.swfにある50個のアイコン"btn_○(1~50)"があります. 例えば,"btn_1"のアイコンをクリックすると,子_1.swfがロードされるように設定しました. しかし,子_1.swfにあるアイコンは機能せず,子にロードしている孫.swfは繰り返し再生されてしまいます. これは,親から見て子に存在するオブジェクトを指示していないことが原因だと考えているのですが,子のASが複雑であり,親にどう設定していいのかわかりません. ましてや,子50個分のデータを親に直接書き込むことも重労働な状態です. 外部swfをロードするよりも,ブラウザから子を開く方法の方が最良でしょうか?? ブラウザ環境がない場所での使用を考えているので,なるべくロードする方法で制作したいです. どなたか一番うまくできる方法を教えていただけないでしょうか?

    • ベストアンサー
    • Flash
  • ブラウザ取得毎にMCをランダム再生させる方法

    はじめまして。flash初心者のものです。 ブラウザを再取得する度に、再生されるMCが変わる(ランダム再生)様なバナーを作成したいです。考えている方法としては、『1つのswfの中に10個のMCを入れて、それぞれをランダムで再生させる』という事で良いと思っています。10個の外部swfファイルをランダムに読み込ませる方法は色々参考資料があるのですが、サーバーの都合で出来れば1つのswfファイルの中に収めたいのです。 現在、1つのswfファイルの中に、clip1~clip10まで作成してあり、それぞれ200フレームの長さのMCになっています。それぞれclip単体では正常に動作しているので、あとはこれをランダムに再生させたいのですが、どういったActionScriptにしたら良いのでしょうか。 ソフトは『FREE MOTION』 バージョンは『Flash Player 7』になってます。

  • 外部mp3のランダム再生について

    初めまして。 AS3.0をまだ勉強中で見よう見まねで作っている状態ですが、 なんとか完成させたいのでご教授ください。 ■目標 ボタンをクリックすると外部mp3が再生。 ただし、音声は複数ありクリックする度にランダムでmp3を再生するようにしたいです。 ■現状 現状はランダムに読み込んでクリックすると再生まではできたのですが、 何度クリックしても最初に読み込んだ同じ音声しか再生されません。 ひたすら繰り返しにすればよいのかと思い、2フレーム目を用意したところ、 ランダム再生にはなったのですが、何もしていない状態でもひたすら読み込みを続けてしまい理想の動きではありませんでした。クリックする度にランダムで読み込めればと思いますが、 どのように書けば良いのかわかりません、よろしくお願いします。 ・ボタンインスタンス名 play_btn ・ファイル mp3/sound0.mp3 mp3/sound1.mp3 mp3/sound2.mp3 ・環境 windows7 FlashCS5 ActionScript3.0 ************ソース*************** import flash.net.URLLoader; var rand_num:int = Math.floor(Math.random() * 2); var name_str:String = "mp3/sound" + rand_num + ".mp3"; var mp3_url:URLRequest = new URLRequest(name_str); var sndCh:SoundChannel; var snd:Sound = new Sound(); snd.load(new URLRequest(name_str)); play_btn.addEventListener(MouseEvent.CLICK, xPlayClick); function xPlayClick(evt:MouseEvent):void { sndCh = snd.play(0, 1); } *************END*************** よろしくお願いします。

    • ベストアンサー
    • Flash
  • FLASH CS4での外部SWFファイルの読み込みについて質問です。困

    FLASH CS4での外部SWFファイルの読み込みについて質問です。困っています。 AS3.0の初心者です。FLASH8(AS2.0)は使っていたのですが、AS3.0についてはほとんど知りません。FLASH8と同じ要領でボタンと透明ムービークリップを作成し、ボタンをクリックするとMCに外部SWFファイルが読み込まれる・・・という設定をしました。 ネットなどで色々調べた結果、SWFファイルの読み込みASは記入できたのですが、問題が一つ。 ボタンのレイヤーがMCのレイヤー下にあると、透明であるMCが邪魔になるのかボタンがクリックできません。ボタンのレイヤーを上に持ってくると、SWFは読み込まれるのですが元のSWFのボタンがそのまま表示されてしまいます。 FLASH8では透明MCが上にあってもボタンをクリックできた記憶があります。透明MCは元のSWF,外部SWFと同じサイズ(全て800x600px)にしてあります。 AS3.0ではどのようにすればいいのかわかりません。 どなたか初心者の私に教えていただけませんか。よろしくお願いします。

  • swf連続再生・2通り作ったのですが...

    すいません、以前swfの連続再生のことで質問させてもらったのですがお礼をさせてもらったあと、2通りのスクリプトで作ってみたのですが、うまくうごかないのです。 何が間違っているのか検討もつかずここに質問させてもらいます。 まずファイル構成は メインのseries.swfを埋め込んでいるhtml └flash_series(フォルダ名) ├series.swf(メインswf:読み込むswf)   ├first.swf (この順で再生↓、以下のswfの最終キーフレームにstop();を記述しています。)   ├second.swf   ├third.swf   ├fourth.swf └fifth.swf で、series.swfのステージに置いた空ムービークリップ「series_mc」にfirst.swf~fifth.swfを読み込み、swfの最終フレームにきたら次のswfを再生という感じで、以下のように組みました。 空ムービークリップ「series_mc」に記述しました。 ---------------------------------------------------------------- onClipEvent (load) { fileArr = new Array(); fileArr[0] = "flash_series/first.swf"; fileArr[1] = "flash_series/second.swf"; fileArr[2] = "flash_series/third.swf"; fileArr[3] = "flash_series/fourth.swf"; fileArr[4] = "flash_series/fifth.swf"; cnt = 0; series_mc.loadMovie(fileArr[cnt]); } onClipEvent (enterFrame) { if (series_mc._totalframes>=2 && series_mc._currentframe == series_mc._totalframes) { if (cnt<fileArr.length-1) { // cntに1を加算 cnt++; } else { cnt = 0; } series_mc.loadMovie(fileArr[cnt]); } } ---------------------------------------------------------------- です。もう一つは連番タイプで メインのseries.swfを埋め込んでいるhtml └flash_series(フォルダ名) ├series.swf(メインswf:読み込むswf)   ├no001.swf (この順で再生↓、以下のswfの最終キーフレームにstop();を記述しています。)   ├no002.swf   ├no003.swf   ├no004.swf └no005.swf で、これもseries.swfのステージに置いた空ムービークリップ「series_mc」にno001.swf~no004.swfを読み込み、swfの最終フレームにきたら次のswfを再生という感じで、以下のように組みました。 空ムービークリップ「series_mc」に記述しました。 ---------------------------------------------------------------- var num_swf = 5; //SWFファイルの個数 var load_file = new Array(); for (i = 0; i < num_swf; i++) { if (i < 10) { load_file[i] = "flash_series/no00" + i + ".swf"; } else if (i < 100) { load_file[i] = "flash_series/no0" + i + ".swf"; } } var i = 0; this.series_mc.loadMovie (load_file[i]); this.series_mc.onEnterFrame = function() { if(2 <= series_mc._totalframes && series_mc._currentframe <= series_mc._totalframes){ if(i<num_swf){ this.series_mc.loadMovie (load_file[++i]); } } } ---------------------------------------------------------------- と組んだのですが両方とも一つも読み込まれません、何が悪いんでしょうか?ご協力お願いします。

    • ベストアンサー
    • Flash
  • FLASH/一定時間停止後、再生されるscript

    flash CS4/ActionScript3.0にてサイトローテーションバナーを制作しております。 ムービークリップ「btn1_mc」をクリックするとフラッグ「scene1」を再生し、 「btn1_mc」にポインタが乗った時は一定時間停止し、再生されるという動きを作りたいのですが、初心者のため、うまくActionScriptが書けません。 setTimeout関数を使えば良いということはわかったのですが… 下記コードに書き加え、実装する方法を教えていただければ助かります。 よろしくお願いします。 btn1_mc.addEventListener(MouseEvent.CLICK,btn1Click); btn1_mc.addEventListener(MouseEvent.ROLL_OVER,btn1Over); btn1_mc.addEventListener(MouseEvent.ROLL_OUT,btn1Out); btn1_mc.buttonMode=true; function btn1Click(evt:MouseEvent):void{ gotoAndPlay("scene1"); } function btn1Over(evt:MouseEvent):void{ gotoAndStop("scene1"); btn1_mc.gotoAndStop(2); } function btn1Out(evt:MouseEvent):void{ gotoAndPlay("60"); btn1_mc.gotoAndStop(1); }

  • 同じMCが連続で再生されないようにランダム再生

    Flash CS6 でAS3を使っています。 質問ですが、同じムービークリップが連続で再生されないようにランダム再生を続けるにはどうすればよいでしょうか? 例えば  mcA、mcB、mcCと3つのムービークリップがあるとして 最初にmcAが再生されたら次はmcBかmcCが再生されるようにし、そこでmcBが再生されたら次はmcAかmcCが再生されるようにし、そこでmcCが再生されれば次はmcAかmcBが再生されるようにする、といった具合にランダムでムービークリップの連続再生をしたいのです。 それと同じムービークリップが連続で再生される確率を下げてランダム再生を続ける方法はありませんでしょうか? 例えば最初の質問と同じように mcA、mcB、mcCと3つのムービークリップがあるとして 最初にmcAが再生されたら次はmcAが連続で再生される確率を下げ、mcAかmcBかmcCが再生されるようにし(確率でいうと、次はmcAは10%、mcBとmcCは45%の確率で再生されるようにする、といった感じです。)、そこでmcBが再生されたら次はmcBが連続で再生される確率を下げ、mcAかmcBかmcCが再生されるようにするといった具合に連続再生をしたいのです。 質問は以上の2つです。宜しくお願いします。

    • ベストアンサー
    • Flash
  • Flash オブジェクトの表示/非表示

    こんにちは。今回はオブジェクトの表示/非表示のことに関して質問させていただきます.使っているものは、Mac/FlashCS3/AS1&2 です. (フレーム名"s1"にて) MC(ムービークリップ)/pre_btn(ボタン)/del_btn(ボタン)/btn(ボタン)というオブジェクトが画面に表示してあります. (アクションフレームに) pre_btn.onRelease = function(){   MC._visible = true; } del_btn.onRelease = function(){   MC._visible = false; } (btnムービークリップアクションに) on(release){   _root.gotoAndPlay("s2") } (フレーム名"s2"にて) btn2(ボタン)のみ画面に表示されています. (btn2ムービークリップアクションに) on(release){   _root.gotoAndPlay("s1") } 以上のACを記述しました.これでMCを表示/非表示させることができ,btnをクリックし"s2"フレームに移動/btn2をクリックし"s1"フレームに移動することもできるようになりました. しかし,"s1"にて非表示にしたMCが,"s2"のフレームに移動し"s1"に戻ってきたとき,表示されている状態に戻ってしまいます. どうしたら,一度非表示にしたMCを,その後フレーム移動したとしても,非表示の状態に保つことができるのでしょうか?? どうか,ヒントだけでもいいので,何か教えていただけると嬉しいです. よろしくお願いします.

専門家に質問してみよう