• ベストアンサー

Flash初心者です。3つのflaファイルを

Flash初心者です。マニュアル通りサイトでロードしやすいように、Flashのファイルを3つつくりました。これらを繋げたいのですが、どのようにしたらよいのでしょうか? 調べてみる"loadMovie"といったアクションスクリプトを使用し、ダミーで作ったファイルに3つを読み込むようですが、良く理解が出来ません。 アクションスクリプトも、イマイチよくわかりません。 OSはOSX10.6です。ソフトはFLASH CS3です。 初心者でもわかるように説明していただける方がいましたら、是非ともお願いいたします。

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

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

> "loadMovie"といったアクションスクリプトを使用し、 > ダミーで作ったファイルに3つを読み込むようですが、 loadMovie は ActionScript 1.0(2.0でも使えるが3.0では使えない)メソッドですよ。 すでに作成された3つの Flash ムービー(SWFファイル) の ActionScript のバージョン設定はどうなっているのでしょうか? ここで言う ActionScript のバージョン設定 とは, 作成された Flash ムービーの中に ActionScript を使っているとか使っていないという話とは別です。 ここで言う ActionScript のバージョン設定 とは, 「パブリッシュ設定」パネルで「Flash」タブを選択したときに 「スクリプト」の欄が ActionScript 1.0 になっているのか 2.0 になっているのか 3.0 になっているのかという設定の話です。 すでに作成された3つの Flash ムービー(SWFファイル) が 例えば Flash Player 10,ActionScript 3.0 で作成されたものであれば 3つを読み込む親SWFの設定も Flash Player 10,ActionScript 3.0 にするべきです。 またそうしたならば loadMovie は使えなくなるということになります。 良くわかりませんので ここでは ActionScript 2.0 の場合と ActionScript 3.0 の場合について回答します。 両者の場合ともファイル構造を次のようにしていたとします。  任意のフォルダ   ├親SWFを貼り付けるHTML   ├親SWF(3つのSWFをロードする)   └files(フォルダ)     ├aaa.swf     ├bbb.swf     └ccc.swf ◎ ActionScript 2.0 の場合 親SWFを作成するFlashドキュメントファイル(FLAファイル)の フレーム1 に書く(コピペする)スクリプト例 ---------------------------------------- //配列「swf_arr」を作成 var swf_arr:Array = new Array(); // //swf_arrの要素にロードするSWFを登録 swf_arr.push("files/aaa.swf"); swf_arr.push("files/bbb.swf"); swf_arr.push("files/ccc.swf"); // //連続ループ再生 する(true) しない(false) を設定 var loop:Boolean = true; // //---以上が変更する設定------ // //カウンタを用意 var cnt:Number = 0; // //空のムービークリップ「ld」を深度0に作成 this.createEmptyMovieClip("ld", 0); // //MovieClipLoaderインスタンス「mcl」を作成 var mcl:MovieClipLoader = new MovieClipLoader(); // //ロードしたSWFの先頭フレームのアクションが //実行されるときに実行するメソッドを定義 this.onLoadInit = function(mc:MovieClip):Void { // //ロードターゲットである「ld」に対して //毎フレーム時間実行するメソッドを定義 mc.onEnterFrame = function():Void { //もしロードしたSWFが最終フレームになれば if (this._currentframe == this._totalframes) { //もしカウンタが配列の要素数-1未満であれば if (cnt<swf_arr.length-1) { //カウンタに1を加算 cnt++; //次のSWFをロード mcl.loadClip(swf_arr[cnt], ld); //カウンタが配列の要素数-1に達していれば } else { //連続ループ再生するの場合 if (loop) { //カウンタを0に戻す cnt = 0; //次のSWFをロード mcl.loadClip(swf_arr[cnt], ld); //連続ループ再生しないの場合 } else { this.stop(); } } delete mc.onEnterFrame; } }; }; // //このタイムラインを「mcl」のリスナーとして登録 mcl.addListener(this); // //ムービークリップ「ld」をターゲットにして最初のSWFをロード mcl.loadClip(swf_arr[cnt], ld); ---------------------------------------- ◎ ActionScript 3.0 の場合 同じく 親SWFを作成するFlashドキュメントファイル(FLAファイル)の フレーム1 に書く(コピペする)スクリプト例 -------------------------------------------- //配列「swf_arr」を作成 var swf_arr:Array = new Array(); //swf_arrの要素にロードするSWFを登録 swf_arr.push("files/aaa.swf"); swf_arr.push("files/bbb.swf"); swf_arr.push("files/ccc.swf"); //連続ループ再生 する(true) しない(false) を設定 var loop:Boolean = true; //---以上が変更する設定--------- //カウンタを用意 var cnt:int = 0; //Loaderインスタンス「ld」を作成 var ld:Loader = new Loader(); //rootに「ld」を配置 addChild(ld); //最初のSWFをURLRequest「req」に設定 var req:URLRequest = new URLRequest(swf_arr[cnt]); //「ld」に最初のSWFをロード ld.load(req); //「ld」のcontentLoaderInfoにリスナーを登録 //(最初のフレームがロードされたときに ,onInitを実行) ld.contentLoaderInfo.addEventListener(Event.INIT, onInit); //関数 onInit を定義 function onInit(evt:Event):void { //「ld」にリスナーを登録 //(毎フレームごとに ,watchSWFを実行) ld.addEventListener(Event.ENTER_FRAME, watchSWF); } //関数 watchSWF を定義 function watchSWF(evt:Event):void { //変数「mc」にロードしたSWFのタイムラインを代入 var mc:MovieClip = MovieClip(evt.target.content); //もしロードしたSWFが最終フレームになれば if (mc.currentFrame == mc.totalFrames) { //もしカウンタが配列の要素数-1未満であれば if (cnt < swf_arr.length - 1) { //カウンタに1を加算 cnt++; //次のSWFを「req」に設定 req.url = swf_arr[cnt]; //次のSWFをロード ld.load(req); //カウンタが配列の要素数-1に達していれば } else { //連続ループ再生するの場合 if (loop) { //カウンタを0に戻す cnt = 0; //最初のSWFを「req」に設定 req.url = swf_arr[cnt]; //最初のSWFをロード ld.load(req); //連続ループ再生しないの場合 } else { mc.stop(); } } //「ld」のリスナーを削除 ld.removeEventListener(Event.ENTER_FRAME, watchSWF); } } --------------------------------------------

Kuma-007
質問者

お礼

ありがとうございます! 論理的、かつフォルダ構造など理解し易く説明をしていただきまして、とても感謝しております。 ActionScript のバージョンは3.0で作成しました。 早速、スクリプトがどのように動くか、親SWFにサンプルをコピペして試してみました。(スクリプトは難しく、ざっと目を通し、どのように動くのかを試すため、ブラックボックスとして作成しました。もちろんファイル名、フォルダ名は入れ替えています。) 親SWFを書き出し、htmlをパブリッシュして、SWFを開いて確認しましたところ、下記のようなメッセージがでます。 「TypeError: Error #1034: 強制型変換に失敗しました。flash.display::AVM1Movie@1ed6a101 を flash.display.MovieClip に変換できません。」メッセージがループしたように出力されます。 aaa.swfとccc.swfには下記で購入したフィルタを使用しています。これが原因なのでしょうか?もしくは私のスクリプトの書いた場所がおましいのでしょうか? http://www.flash-filter.net/tile-transition-effect.phtml bbb.swfは、フィルタを使わずに、最初から自分で作成したfliファイルから書きだしたものです。 また親SWFのドキュメントサイズはaaa.swf, bbb.swf, ccc.swfと同じ大きさで作っています。 こちらが原因なのでしょうか? お時間があるときに、ご教授いただけましたら幸甚です。 どうぞよろしくお願いします。

その他の回答 (1)

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

#1です。 > flash.display::AVM1Movie@1ed6a101 を > flash.display.MovieClip に変換できません。 その 「AVM1」 というのは 「ActionScript 2.0 以下動作エンジン」のことです。 http://www.google.co.jp/search?sourceid=navclient&hl=ja&q=AVM1+AVM2 やはり ActionScript 3.0 と 2.0 の混在が原因のようですが。。。 > aaa.swfとccc.swfには下記で購入したフィルタを使用しています。 > これが原因なのでしょうか?  ~略~ > bbb.swfは、フィルタを使わずに、最初から自分で作成したfli > ファイルから書きだしたものです。 原因を特定したいのでしょう? なぜそんな複雑な状況で原因を見つけようとするのでしょうか? それも他人には検証できない条件を提示して。。。 単に 10フレーム くらいの 四角が左から右にモーショントゥイーンで動くような3つのSWFでも作成して それを aaa.swf bbb.swf ccc.swf と命名して実験すれば 少なくとも何かがわかるはずですが。 自分自身でするべき当たり前のことをせずにして,何も解決することはありませんよ。

Kuma-007
質問者

お礼

早速のご教授をありがとうございます。 おっしゃるとおり、簡単なswfを作成して、検証してみます。 兎にも角にも、ActionScriptを見ただけでめまいがするくらいですが、一生懸命頑張ってみます。 励ましていただいてありがとうございます。 また何かありましたら、宜しくお願い致します。

Kuma-007
質問者

補足

BlurFiltanさん、こんにちは。 簡単なswfを3つつくって検証しました。スクリプトが綺麗に動いて、3つのswfがつながりました! sample1.swf-->sample2.swf-->sample3.swfへトランジションもスムース綺麗につながりました。 ご指導いただきまして、本当にありがとうございます。 書き出すときに、ActionScriptの設定が2.0と3.0を混在していたのが原因でした。 オリジナル版も書き出すときに、ActionScriptのバージョンを確認しながら、(3.0)で書きだしたところ、3つがつながりました! ただ、original.swf1-->original.swf2-->original.swf3と移り変わるときに、少しもたついた感じになり、一瞬画像が消えてからまた次のswfに移行していきます。またすべてのswfの背景色がなくなっていました。これはスクリプトに依存するのでしょうか? お時間があるときにご教授いただければ助かります。 よろしくお願い致します。

関連するQ&A

  • FLASH外部ファイルの読み込み

    Flashでjpegファイルの読み込みをしたいのですが、 アクションスクリプトで onClipEvent(load){ _root.hyouji_mc.loadMovie("face1.jpg"); } とインスタンスに記入するとなにも表示されません。 【hyouji_mc】を青色にして実行するとスクリプトのない状態ですと青の四角が表示されるのですが、スクリプトを実行すると真っ白になり、やはり画像が表示されません。 試しに【load】をe【nterFrame】に変えてもだめでした。 【mouseDown】や【mouseMove】,【keyDown】にすると画像は表示されます。 【onClipEvent】を【on(rease)】等に変更をしても表示されます。 (1)どうにかフレームが読み込まれた時に画像が表示される様にしたいのですが、解決策としてはフレームアクションとして記述するしかないのでしょうか? (2)【onClipEvent(load,enterFrame)】で   【loadMove()】は実行できないのでしょうか? フラッシュはMXを使っています.OSは2000です。 意味がわかりにくいと思いますが、ご教授ください. よろしくお願いします。

  • FLASH 初心者

    FLASH初心者です。 この度サイト作ることになりまして 一部FLASHを使いたい考えております。 横340p 縦70px 程のサイトロゴ部分を 簡単に動かしたいのですが、 何せ初めてFLASHに触れたので アクションスクリプトとやらが、さっぱりわかりません… 悪戦苦闘の末、タイムライン上で 自分が思うような、動きはできたのですが アクションが付けられなくて困っています。 どなたか教えて頂けますでしょうか? ======================================== FLASHを使ってでやりたいコトは↓です。 ■サイトを開いたらロゴが動く ■その動きがループせずに終わる ■ロールオーバーで最初からまた始まる ■クリックして離したらリンク先に飛ぶ ======================================== 以上です。 いろいろWebで検索してみたのですが 自分やりたいことが簡単すぎなのか、 超初心者が見て理解できるサイトを探すことができませんでした。 もしよろしければ、初心者がいちから学べるような サイトも教えて頂ければ幸いです。 宜しくお願いします。

    • ベストアンサー
    • Flash
  • FLASHでボタンを押すと、FLASHムービーが再生から停止までいくようにしたいです。

    FLASHの初心者です。 以下の物が作りたくてチャレンジをしております。 構成的には、一個の画面と、一個のボタンがあり、 あらかじめFLASHムービーを何個か作り、 一個のFLASHファイルに読み込んで、 ボタンを押すと一個目のムービーが再生、最終フレームで停止、 もう一回ボタンを押すと次のムービーが再生、最後… という具合にしていきたいです。 おそらくアクションスクリプトを使用して作らなければならないと 思うのですが、うまくできないのです… ついでにもう一つ、お聞きしたいことがあります。 フレーム数を右下に常に表示させたいです。 この方法も教えて欲しいです。 使用ソフトはFLASH CS3で、アクションスクリプトは3.0を使っています。 説明下手ですみません… よければ誰か助けてください>△<

  • flashの勉強をしています。古い映画のカウントダウンを作りたくて調べ

    flashの勉強をしています。古い映画のカウントダウンを作りたくて調べていたら下記サイトで作り方を紹介していました。 http://d.hatena.ne.jp/habu024/20091025/1256466188 説明通りに作業を進め最後のアクションスクリプトの記述をコピペしてプレビューしてみましたが、コンパイルエラーがでてしまいうまくいきません。 私はflash超初心者でアクションスクリプトの知識も全くありません。 なるべくわかりやすくご指導くださるとありがたいです。 ちなみにこのサイトで紹介しているのはアクションスクリプト3.0でしょうか? 私の使用してるソフトはアドビのflash CS4です。 アクションスクリプトを勉強しようとも思っているのですが、正直何から手を付けて良いのかもわからず困っています。 とりあえず無料で勉強できそうなサイトがありましたらご教授くださると助かります。 よろしくお願いします。

  • ASでの動画ファイルの読み込み

    こんにちは。 Flash ではアクションスクリプトを使って、LoadMovie で swf を読み込めるようですが、 同様にしてアクションスクリプトを用いて avi や mpg 動画ファイルの読み込みはできないのでしょうか? swf、サウンドの読み込みのようにパス指定ができればよいのですが。

    • ベストアンサー
    • Flash
  • Flashでログファイルの呼び出しのようなプログラム

    タイトルのとおりです。 PHPのようにFlashでログファイルの呼び出しのようなプログラムはできますか? PHPの場合、 あるcsvファイルに、 画像ファイル名・URL・コメント とを書き、それをリスト化して配列に組み込み、 それを取り出して表示。 といった感じのプログラムをフラッシュでもできないかなと考えています。 環境はFlash CS3です。 アクションスクリプトは2.0を使用していますが、 3.0でもOKです。

    • ベストアンサー
    • Flash
  • flaファイルをcsfファイルに変換

    flaファイルをcsfファイルに変換することは出来るでしょうか。 flaファイルをsuzuka(フリーのフラッシュ作成ツール)で開きたいのですが、csf,csfzファイルしか開けません。 これだとアクションスクリプトなどのサンプルが使えません。 結構困っていますので回答早めにお願いします^^

    • ベストアンサー
    • Flash
  • テキストファイルを読み込むアクションは

    windows2000 Flash MX 外部画像ファイル(**.jpg)は loadMovie("**.jpg")で読み込めますが、外部テキストファイル(**.txt)を読み込むアクションスクリプトが解りません。 恐縮ですが例文を示していただけませんか。

    • ベストアンサー
    • Flash
  • Flash lite 1.1での質問です。

    Flash lite 1.1での質問です。 最近Flashをはじめたばかりの初心者です。 とても初歩的な質問かもしれませんが、どなたかご教授頂けると助かります。 <質問内容> メインのswfファイルのルートに配置されているmcというムービークリップを、loadMovie関数で外部swfファイルに置き換えたあと、外部swf内に定義されている変数が参照できません。 (外部のswfには画像データも含まれているので、loadvariables関数は使えません) 【構成】 ・main.swf(メインのswfファイル)   ├btn(main.swfのルートに配置されているボタン)   └mc(main.swfのルートに配置されているムービークリップ) ・gaibu.swf(loadMovieで読み込む外部のswfファイル) 【gaibu.swfのルートタイムラインのActionScript】 msg = "this is gaibu.swf!"; 【やりたいこと】 メインのswfでのボタンアクションで、gaibu.swfをロードし、「action」というルートタイムライン上のラベルに移動します。 on(press) { loadMovie("gaibu.swf","mc"); gotoAndStop("action"); } 「action」に移動した後、ボタンアクションにてloadMovieで読み込んだgaibu.swf内の変数msgを出力したいのですが、何も表示されません。 on(press) { trace(mc.msg); } loadMovie関数を使って外部のswfを読み込むと、(gaibu.swfは色を変えてあるので)読み込みは出来ていると思うのですが、そのswf内で定義されている変数が参照できません。loadMovie関数で読み込んだswf内で定義されている変数は消えてしまうのでしょうか? 分かりにくい説明ですみませんが、宜しくお願いいたします。

    • ベストアンサー
    • Flash
  • FlashとHTMLの階層が違うために表示できない(と思われる)。

    複数のswfファイルをランダム表示するために、ひとつのswfファイルをベースにして、そこに以下のようなアクションスクリプトを記述することによって動作させることができました。 //1~3の整数の乱数を,変数 ransuu にセット ransuu = Math.floor(Math.random()*13)+1; //ムービー内に ransuu+".swf" をロード this.loadMovie(ransuu+".swf"); しかし、上記のアクションスクリプトは、ベースとなるswfファイルと、それを設置するHTMLと、ランダム表示させるswfファイル群が全て同じ階層にあるということを前提にして書かれているようです。従って、HTMLをひとつ上の階層に設置し、そこからベースとなるswfファイルを設置しても、表示されません。FlashとHTMLの階層が違う場合には、どのように上記のアクションスクリプトを変更すればよいのかを教えてください。

    • ベストアンサー
    • Flash