アプリ版:「スタンプのみでお礼する」機能のリリースについて

actionscript 3でムービークリップ内に読み込んだ外部swf内の関数の使い方を教えてください。
以下仮ソースです

var mc:MovieClip = new MovieClip();
var imgLoader:Loader = new Loader();
var path:URLRequest = new URLRequest("materials/key_550.swf");
var childSwf:MovieClip;
imgLoader.load(path);
imgLoader.contentLoaderInfo.addEventListener(Event.COMPLETE,compLoader);
function compLoader(evt:Event):void{
mc.addChild(imgLoader);
addChild(mc);
childSwf = mc.imgLoader.content as MovieClip //ここをimgLoader.content as MovieClipとするといけるのですが、mcの子のloaderと指定したいのです。
startGOGO();
}
function startGOGO():void{
childSwf.keyContMove(); //子のswf内の関数です。
}

よろしくお願い致します。

A 回答 (1件)

書かれていらっしゃる imgLoader は


Loaderインスタンス を参照する変数です。
そこが理解できていないのではないかと思います。

まず
書かれていらっしゃるスクリプトをちゃんと動作するように書き換えた上で
一部に注釈行を加えます。


------------------------------
var mc:MovieClip = new MovieClip();

//Loaderインスタンスを作成し
//そのインスタンスを参照する変数imgLoaderを
//このタイムラインに用意
var imgLoader:Loader = new Loader();

var path:URLRequest = new URLRequest("materials/key_550.swf");

var childSwf:MovieClip;

//変数imgLoaderが参照するインスタンスに
//指定ファイルをロード
imgLoader.load(path);

imgLoader.contentLoaderInfo.addEventListener(Event.COMPLETE,compLoader);

function compLoader(evt:Event):void {
//mc内に imgLoaderが参照するインスタンスを配置
mc.addChild(imgLoader);
addChild(mc);
//★変更:変数childSwfにimgLoader内コンテンツの参照を代入
childSwf = imgLoader.content as MovieClip;
//★追加:関数startGOGOを実行
startGOGO();
}

//関数startGOGOの定義
function startGOGO():void {
childSwf.keyContMove();
}
------------------------------

とりあえずはココまで↑を理解してみてください。



> //ここをimgLoader.content as MovieClipとすると
> いけるのですが、mcの子のloaderと指定したいのです。

なぜそのようなこと(変なこと)をする必要があるのかさっぱりわかりませんが
もしそうするのであれば上記スクリプトをさらに次のように変更する必要があります。

------------------------------
var mc:MovieClip = new MovieClip();

//★変更:Loaderインスタンスを作成し
//そのインスタンスを参照する変数imgLoaderを
//mc内に用意
mc.imgLoader = new Loader();

var path:URLRequest = new URLRequest("materials/key_550.swf");

var childSwf:MovieClip;

//★変更:mc内の変数imgLoaderが参照するインスタンスに
//指定ファイルをロード
mc.imgLoader.load(path);

mc.imgLoader.contentLoaderInfo.addEventListener(Event.COMPLETE,compLoader);

function compLoader(evt:Event):void {
//★変更:mc内に mc内の変数imgLoaderが
//参照するインスタンスを配置
mc.addChild(mc.imgLoader);
addChild(mc);
//★変更:変数childSwfにmc内の
//imgLoader内コンテンツの参照を代入
childSwf = mc.imgLoader.content as MovieClip;
//関数startGOGOを実行
startGOGO();
}

//関数startGOGOの定義
function startGOGO():void {
childSwf.keyContMove();
}
------------------------------



繰り返しますが
 ○○ = new □□();
で作成される ○○ は
インスタンスを参照する変数です。
 
    • good
    • 0
この回答へのお礼

教えていただいてありがとうございます。独学で勉強したのでちゃんと理解できていなかった部分がありました。

説明不足で申し訳ございません。やりたい事は以下のような事です。

このソースが書かれている『親swf』と『親swf』が関数を実行したい『子swf』とさらに『親swf』内の関数を実行したい『大親swf』がいます。
『大親swf』はプリローダです。初めにこの『親swf』を読み込み、『親swf』がxmlからパスを読み込んで『子swf』や『子jpg』を配置します。
そして『大親swf』が全て実行し終えると『親swf』内の関数 startGo(); を実行して『親swf』が動き出してkeyArray[i]をリスナー登録します。
そしてkeyArray[i]をクリックし、もしそれがjpgではなくswfファイルならばその中の関数を読みこみたいです。


var keyArray:Array = [];
var childSwf;

yomikomi();

function yomikomi():void{
for(var i:int = 0;i < 9;i++){
keyArray[i] = mcComp(xml.main.contents[i].keyPath,i); //xmlから画像やswfのパスを読みこみます
}
}

//この中で配置します
function mcComp(imgPath:String,i:int):MovieClip{

var mc:MovieClip = new MovieClip();

mc.imgLoader = new Loader();
mc.mcPath = imgPath;

var path:URLRequest = new URLRequest(mc.mcPath);

mc.imgLoader.load(path);
mc.imgLoader.contentLoaderInfo.addEventListener(Event.COMPLETE,compLoader);
function compLoader(evt:Event):void {
mc.addChild(mc.imgLoader);
childSwf = mc.imgLoader.content as MovieClip;
}
mc.x = i * 50;
mc.y = 50;
return mc;
}

//大親のムービーが終わるとこれを実行します。
function startGo():void{
for(var i:int = 0;i < 9;i++) {
keyArray[i].addEventListener(MouseEvent.CLICK,keyClick);
}
}

function keyClick(evt:Event):void{
//もしクリックしたのがswfならそのswf内の関数を実行
if(keyArray[i].mcPath.lastIndexOf("swf") != -1){
childSwf = keyArray[i].imgLoader.content as MovieClip;
childSwf.keyContMove();
}
}

このソースもおかしな部分があったらすいません。よろしくお願いします。

お礼日時:2011/04/07 15:36

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