電子書籍の厳選無料作品が豊富!

actionScript3.0にて外部xmlファイルに記述された複数のswfファイル名を読み込み、
それらのファイルを連続で再生させるシステムを作成したいのですが、なかなか思うように動作してくれずに困っています。

flashの開発環境は、windowsXP、flashCS4、actionScript3.0です。

テストで作成したxmlファイルの中身は、下記のようになっています。
00.swfを再生、再生し終えたら、01.swfを再生、01.swfを再生し終えたら、02.swfを再生・・・という動作を希望しています。

<?xml varsion="1.0" encoding="UTF-8"?>
<swflist>
<swfdata>
<filename>00.swf</filename>
</swfdata>
<swfdata>
<filename>01.swf</filename>
</swfdata>
<swfdata>
<filename>02.swf</filename>
</swfdata>
<swfdata>
<filename>03.swf</filename>
</swfdata>
<swfdata>
<filename>04.swf</filename>
</swfdata>
</swflist>

おすすめのサンプル、もしくは書籍がありましたら教えてください。
よろしくお願い致します。

A 回答 (1件)

まず細かい所から


<?xml varsion="1.0" encoding="UTF-8"?>
 ↓変更↓
<?xml version="1.0" encoding="UTF-8"?>
ですね(varsion → version)。


そのXMLがSWFなどと同じフォルダに
「list.xml」というファイル名で存在するとします。

その場合のフレームに書くスクリプト例↓

==============
//---XML部---

//Flash内のXMLインスタンスを宣言
var my_xml:XML;

//XMLファイルロード用インスタンスを作成
var xml_ld:URLLoader = new URLLoader();

//XMLファイルのリクエストインスタンスを作成
var xml_rq:URLRequest = new URLRequest("list.xml");

//XMLファイルロード完了時に xmlOnLoad を実行
xml_ld.addEventListener(Event.COMPLETE, xmlOnLoad);

//関数 xmlOnLoad の定義
function xmlOnLoad(evt:Event):void {
//XMLインスタンスを作成
my_xml = new XML(xml_ld.data);
//swfLoad を実行
swfLoad();
}

//XMLファイルをロード
xml_ld.load(xml_rq);

//---SWF部---

//カウント用変数 cnt を用意
var cnt:uint = 0;

//外部SWFファイルロード用インスタンスを作成
var swf_ld:Loader = new Loader();

//外部SWFファイルロード用インスタンスを配置
swf_ld.x = 20;
swf_ld.y = 10;
this.addChild(swf_ld);

//外部SWFファイルロード時swfOnLoadを実行
swf_ld.contentLoaderInfo.addEventListener(Event.COMPLETE, swfOnLoad);

//関数 swfOnLoad の定義
function swfOnLoad(evt:Event):void {
//毎フレームwatchSWFを実行
swf_ld.addEventListener(Event.ENTER_FRAME,watchSWF);
}

//関数 watchSWF の定義
function watchSWF(evt:Event):void {
var all_frm:uint = MovieClip(swf_ld.content).totalFrames;
var now_frm:uint = MovieClip(swf_ld.content).currentFrame;
//再生フレームが全フレーム数になれば
if (now_frm == all_frm) {
//毎フレームwatchSWFを実行するリスナーを削除
swf_ld.removeEventListener(Event.ENTER_FRAME,watchSWF);
//cntが XMLのノード数-1 未満であれば
if (cnt < my_xml.children().length() - 1) {
//cntに1を加算
cnt++;
} else {
//それ以外はcntを0に戻す
cnt = 0;
}
//swfLoad を実行
swfLoad();
}
}

//関数 swfLoad の定義
function swfLoad():void {
//XMLからcnt番のfilenameの値を取り出す
var swf_str:String = my_xml.children()[cnt].filename;
//SWFファイルのリクエストインスタンスを作成
var swf_rq:URLRequest = new URLRequest(swf_str);
//SWFファイルをロード
swf_ld.load(swf_rq);
}
==============
 
「actionScript3.0にて外部x」の回答画像1
    • good
    • 0
この回答へのお礼

すばらしいです。。。きちんと動作しました。
画像まで添付していただいて、本当に助かりました。

今回の質問とは関係ないのですが、このシステムを元に
特定のswfファイルが1日に再生できる回数を設定したり(たとえば、01.swfは50回、03.swfファイルは25回など)、再生させる期間および時間帯を自由に指定できるようにするシステムを構築する予定です。

作成しなくてはならないシステムを考えると、スクリプト自体が膨大になることが予想されるので、
ご伝授いただいた「フレームに記述するタイプのスクリプト」を、「外部ファイルに記述するタイプのスクリプト」に書き直させていただくことになると思います。
(packageやらimportやら、わからないことだらけなのですが。。。汗)

ほとんど初心者の私が、そのようなシステムを構築できるものだろうかとも思いますが、何とかやり遂げたいと思います。
どうしても突破できない壁に当たってしまった際には、また質問に書き込ませていただきますので、その際は何卒よろしくお願いします。

今回は本当にありがとうございました。。。

お礼日時:2010/11/08 23:01

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!