• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:swf連続再生・2通り作ったのですが...)

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

このQ&Aのポイント
  • swfの連続再生に関する質問です。2通りの方法でスクリプトを作成しましたが、うまく動作しません。
  • ファイル構成はメインのseries.swfを埋め込んでいるhtmlファイルと、それに関連するswfファイルがあります。
  • スクリプトの内容に誤りがあるようですが、具体的にどこが悪いのかわかりません。アドバイスをお願いします。

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

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

#1です。 #1に書いた内容はそのままとして, さらにもう1行見落としていました。 > 空ムービークリップ「series_mc」に記述しました。 ということは, 「series_mc」自体に > onClipEvent (load) { >  …略… >  series_mc.loadMovie(fileArr[cnt]); > } を書かれたということですね。 それは #1 で書いた内容とともにダブルで行けてません。 > onClipEvent (load) { >  …略… >  series_mc.loadMovie(fileArr[cnt]); > } これは onClipEvent (load) { …略… this.loadMovie(fileArr[cnt]); } または onClipEvent (load) { …略… _parent.series_mc.loadMovie(fileArr[cnt]); } などと書き直す必要がありますが,それでもダメです。 「onClipEvent(load)で自分自身にloadMovieしてはいけません」 http://f-site.org/articles/2003/10/27232817.html > onClipEvent (load) { >  …略… >  series_mc.loadMovie(fileArr[cnt]); > } を書かれたムービークリップが 「series_mc」 であるということは 自分自身の onClipEvent(load) で自分自身に外部 SWF をロードしようとしているということになります。 その外部 SWF がロードされたとたん, またその onClipEvent (load) が実行されてしまいますから, 無限に同じものをロードし続けてしまいます。 結果,外部 SWF が 表示される前にまた同じ SWF のロードが開始されるので何も表示されなくなるということです。 ですから, onClipEvent (load) { …略… _parent.series_mc.loadMovie(fileArr[cnt]); } などを書く場合は, 「series_mc」以外のムービークリップを作成して, そのムービークリップに書く必要があります。 そういう意味で (「series_mc」 と スクリプトを書いたムービークリップは別物として)書いたのが #1 です。 ※ しかしそういうことは普通はしないので,   根本的にムービーの構造やスクリプトを書く場所や   スクリプト内容を考え直した方が良いような気がします。

yoyoyoiyoi
質問者

お礼

毎回BlurFiltanさんには、お世話になってありがとうございますm(_ _)m 「onClipEvent(load)で自分自身にloadMovieしてはいけません」 ​http://f-site.org/articles/2003/10/27232817.html とても分かりやすく説明されていて参考になりました。 自分自身に外部swfをロードしていたので再生されなかったのですね。 それとインスタンスのパスも違っていたり、やはりまだActionScriptはまだまだ理解できていませんね。 あれからまたソースを見直して以下のように書き直しました。 swfのファイル名がバラバラの場合は、メインのseries.flaのステージに置いた空ムービークリップ(名前無し)に記述して --------------------------------------------------------------- onClipEvent (load) { // フォルダ名URLの変数定義 var folder:String= "フォルダ名/"; // 外部ファイル名データを入れる配列を作成 fileArr = new Array(); fileArr[0] = folder + "first.swf"; fileArr[1] = folder + "second.swf"; fileArr[2] = folder + "third.swf"; fileArr[3] = folder + "fourth.swf"; fileArr[4] = folder + "fifth.swf"; cnt = 0; // 読み込みようのムービークリップを作成して、配列のcnt要素のSWFをload_mcにロード this.createEmptyMovieClip("load_mc",1); load_mc.loadMovie(fileArr[cnt]); } onClipEvent (enterFrame) { if (load_mc._totalframes>=2 && load_mc._currentframe == load_mc._totalframes) { if (cnt<fileArr.length-1) { cnt++; } else { cnt = 0; } load_mc.loadMovie(fileArr[cnt]); } } --------------------------------------------------------------- で連続再生されました。続く...

yoyoyoiyoi
質問者

補足

次にswfのファイル名が連番の場合、メインのseries.flaのステージに置いた空ムービークリップ(名前無し)の中の1フレームに以下を記述しました。 --------------------------------------------------------------- var num_swf = 5; // 再生したいswfが5個の場合 var load_file = new Array(); var folder:String = "フォルダ名/"; for (i=1; i<=num_swf; i++) { if (i<10) { load_file[i] = folder+"no00"+i+".swf"; } else if (i<100) { load_file[i] = folder+"no0"+i+".swf"; } } var i = 1; this.createEmptyMovieClip("load_mc",1); this.load_mc.loadMovie(load_file[i]); this.onEnterFrame = function():Void { if (load_mc._totalframes>=2 && load_mc._currentframe == load_mc._totalframes) { if (i<num_swf) { i++ } else { i = 1; // 初期化 } this.load_mc.loadMovie(load_file[i]); } }; --------------------------------------------------------------- でうまく連続再生されました。 いまいちクリップアクション、フレームアクションの使い分けがわかっていなかったようです、もっと勉強しなきゃダメですね~。 お付き合いしていただいて、どうもありがとうございました。

その他の回答 (1)

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

.> series.swfのステージに置いた空ムービークリップ「series_mc」に > first.swf~fifth.swfを読み込み  ↓矛盾している↑ > onClipEvent (load) { >  …略… >  series_mc.loadMovie(fileArr[cnt]); > } series_mc.loadMovie(fileArr[cnt]); これだと, そのスクリプトを書いたムービークリップ内にある series_mc に swf がロードされます。 もし そのスクリプトを書いたムービークリップ内に series_mc がなければ swf はどこにもロードされません。 _parent.series_mc.loadMovie(fileArr[cnt]); または this._parent.series_mc.loadMovie(fileArr[cnt]); または _root.series_mc.loadMovie(fileArr[cnt]); などにする必要があると思います。 onClipEvent (enterFrame) {} 内も同じくです。 その前に, 連番とかそういうものではなくて, 単純に1つでやってみる必要があると思いますよ。