• ベストアンサー
  • 困ってます

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

  • 質問No.6802910
  • 閲覧数362
  • ありがとう数2
  • 回答数2

お礼率 62% (62/100)

Flash初心者です。マニュアル通りサイトでロードしやすいように、Flashのファイルを3つつくりました。これらを繋げたいのですが、どのようにしたらよいのでしょうか?

調べてみる"loadMovie"といったアクションスクリプトを使用し、ダミーで作ったファイルに3つを読み込むようですが、良く理解が出来ません。

アクションスクリプトも、イマイチよくわかりません。
OSはOSX10.6です。ソフトはFLASH CS3です。

初心者でもわかるように説明していただける方がいましたら、是非ともお願いいたします。

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

  • 回答No.1
  • ベストアンサー

ベストアンサー率 91% (1611/1754)

> "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

お礼率 62% (62/100)

ありがとうございます!
論理的、かつフォルダ構造など理解し易く説明をしていただきまして、とても感謝しております。

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と同じ大きさで作っています。
こちらが原因なのでしょうか?

お時間があるときに、ご教授いただけましたら幸甚です。
どうぞよろしくお願いします。
投稿日時:2011/06/12 18:54

その他の回答 (全1件)

  • 回答No.2

ベストアンサー率 91% (1611/1754)

#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

お礼率 62% (62/100)

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の背景色がなくなっていました。これはスクリプトに依存するのでしょうか?

お時間があるときにご教授いただければ助かります。
よろしくお願い致します。
投稿日時:2011/06/13 15:42
お礼コメント
Kuma-007

お礼率 62% (62/100)

早速のご教授をありがとうございます。

おっしゃるとおり、簡単なswfを作成して、検証してみます。
兎にも角にも、ActionScriptを見ただけでめまいがするくらいですが、一生懸命頑張ってみます。

励ましていただいてありがとうございます。
また何かありましたら、宜しくお願い致します。
投稿日時:2011/06/12 21:56
関連するQ&A

その他の関連するQ&Aをキーワードで探す

ピックアップ

ページ先頭へ