トップへ戻るニュースフォーラムFLASH-ML 過去ログBak@Flaダウンロードよくある質問と答
ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   迷える子羊の部屋【初心者専用】
     外部SWFからMC内のラベルを再生する
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
yoine
Åê¹ÆNo.42921
投稿日時: 2009-7-13 19:24
新米
居住地:
投稿: 16
使用環境:
WinVista(XPも使用)、Flash CS4、
ActionScript3.0
外部SWFからMC内のラベルを再生する
いつも覗かせていただいています。

例えば、「main.swf」と「page.swf」があり、
更に「page.swf」の中に「_mc」があり、
その_mcは「test1」「test2」「test3」のラベルを持っているとします。

main.swfから、page.swfのtest2ラベルを再生したいのですが、
やり方がいまいちわかりません。


今まではメインのタイムライン上にラベル名を書いていたのですが、
負荷が高くなるため、それに対する処理を施すために中身を全て書き換えようとしています。

図式
-----------------------------------
【main.swf】
  ↓クリック
【page.swf(_mc → test2)】
-----------------------------------

以下、スクリプトです。
※メインタイムラインに記載していたときのものです。


_btn.addEventListener(MouseEvent.CLICK,clickHandler,false,0,true);


var loader:Loader = new Loader();
var url:String="page.swf";
var request:URLRequest=new URLRequest(url);

loader.load(request);

function clickHandler(event:MouseEvent):void {
//page2LoadNextをステージに配置する
addChild(loader);
MovieClip(loader.content).gotoAndPlay("test2");
}

MovieClip(loader.content).gotoAndPlay("test2");
の部分に何か追記すればよいのかとにらんではいるのですが、
「見つかりません」とエラーが返されてしまいます。。


お手数をおかけしますが、よい方法をご教授下さい。

よろしくお願いします。
ひろゆき
Åê¹ÆNo.42922
投稿日時: 2009-7-13 20:26
ちょんまげら
居住地: 大阪密林
投稿: 3702
使用環境:
10.3.9/10.6.2

CS3/CS4 Pro
Flex 2/3 SDK
Pro8.0
Pro7.2

FlashPlayer
7.0r24/8.0r24/9.0r115/10.0r45
Safari 1.3.2/4.0.4
Firefox 2.0.0.20/3.5.7

MacOS 9.2.2
Flash 4/5
Re: 外部SWFからMC内のラベルを再生する
_btn.addEventListener(MouseEvent.CLICK,clickHandler,false,0,true);

var loader:Loader = new Loader();
var url:String="page.swf";
var request:URLRequest=new URLRequest(url);
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler, false, 0, true);
loader.load(request);

function clickHandler(event:MouseEvent):void {
	addChild(loader);
	//MovieClip(loader.content).gotoAndPlay("test2");
}
function completeHandler(event:Event):void {
	event.target.removeEventListener(Event.COMPLETE, completeHandler);
	MovieClip(loader.content).gotoAndPlay("test2");
}
では、いかがですか?


----------------
質問する際は、回答者に具体的な情報を与えてくださいなのニャ!

yoine
Åê¹ÆNo.42933
投稿日時: 2009-7-14 14:05
新米
居住地:
投稿: 16
使用環境:
WinVista(XPも使用)、Flash CS4、
ActionScript3.0
Re: 外部SWFからMC内のラベルを再生する
ご解答ありがとうございます。

記載いただいた通りにやってみましたが、
「ArgumentError: Error #2108: シーン test2 が見つかりません。」
とエラーを返されてしまいました。。

記載いただいたソースはどう解釈すればよいでしょうか?
「読み込みが完了して、_btnがクリックされたらtest2を再生する」と似たようなものなのかな、と考えてはみたのですが、いまいち自信が持てません。

お時間がありましたら、後学のために軽くご説明頂けるととてもありがたいです。
ひろゆき
Åê¹ÆNo.42934
投稿日時: 2009-7-14 14:26
ちょんまげら
居住地: 大阪密林
投稿: 3702
使用環境:
10.3.9/10.6.2

CS3/CS4 Pro
Flex 2/3 SDK
Pro8.0
Pro7.2

FlashPlayer
7.0r24/8.0r24/9.0r115/10.0r45
Safari 1.3.2/4.0.4
Firefox 2.0.0.20/3.5.7

MacOS 9.2.2
Flash 4/5
Re: 外部SWFからMC内のラベルを再生する
function completeHandler(event:Event):void {
	event.target.removeEventListener(Event.COMPLETE, completeHandler);
	//MovieClip(loader.content).gotoAndPlay("test2");
	loader.content.gotoAndPlay("test2");
}
では、いかがですか?


"test2"が存在しているフレームまで読み込みが完了していないのに、
そこにアクセスしようとしても、無理では?


----------------
質問する際は、回答者に具体的な情報を与えてくださいなのニャ!

yoine
Åê¹ÆNo.42935
投稿日時: 2009-7-14 14:55
新米
居住地:
投稿: 16
使用環境:
WinVista(XPも使用)、Flash CS4、
ActionScript3.0
Re: 外部SWFからMC内のラベルを再生する

>"test2"が存在しているフレームまで読み込みが完了していないのに、
>そこにアクセスしようとしても、無理では?


なるほど・・・だからイベントリスナーでCOMPLETEを設定するのですね。解りました!


今度のソースでは先述のエラーは出ませんでしたが、今度は「1061:未定義である可能性のあるメソッド gotoAndPlay を、静的型 flash.display:DisplayObject の参照を使用して 呼び出しました。」とのエラーが返されました。

未定義である、ということはloader.content.gotoAndPlay("test2");
の前で型変換をすればよいのでしょうか。。
ひろゆき
Åê¹ÆNo.42936
投稿日時: 2009-7-14 15:29
ちょんまげら
居住地: 大阪密林
投稿: 3702
使用環境:
10.3.9/10.6.2

CS3/CS4 Pro
Flex 2/3 SDK
Pro8.0
Pro7.2

FlashPlayer
7.0r24/8.0r24/9.0r115/10.0r45
Safari 1.3.2/4.0.4
Firefox 2.0.0.20/3.5.7

MacOS 9.2.2
Flash 4/5
Re: 外部SWFからMC内のラベルを再生する
function completeHandler(event:Event):void {
	event.target.removeEventListener(Event.COMPLETE, completeHandler);
	MovieClip(loader.content)._mc.gotoAndPlay("test2");
}
では、いかがですか?


----------------
質問する際は、回答者に具体的な情報を与えてくださいなのニャ!

yoine
Åê¹ÆNo.42937
投稿日時: 2009-7-14 15:35
新米
居住地:
投稿: 16
使用環境:
WinVista(XPも使用)、Flash CS4、
ActionScript3.0
Re: 外部SWFからMC内のラベルを再生する
ありがとうございます!
このソースで無事できました!
joyko
Åê¹ÆNo.42938
投稿日時: 2009-7-14 17:14
常連
居住地: 埼玉県
投稿: 167
使用環境:
WinXP(SP3)
Flash8 Basic
FlashCS3
Flash CS4
Re: 外部SWFからMC内のラベルを再生する
yoineさん、ひろゆきさん、皆さん、
今日は。
私も、AS3.0勉強中ですが、以下のテストをしてみました。

【現状:】以下に3つの方法で試しましたが、
全て、page.swfのラベル test2に、移動して停止するので、結果は、OKなのですが・・・

【疑問:】方法−1の場合、MovieClipクラスのメソッドを使うのに、キャストなしでも行けてしまうのですが、
これは、何故なのか、理解できてません。

2とひろゆきさんご提示の3は、納得出来るのですが、1がOKな理屈が分からないので、どなたか、教えて頂けると、助かります。

_btn.addEventListener(MouseEvent.CLICK,clickHandler,false,0,true);
var loader:Loader = new Loader();

function clickHandler(e:MouseEvent):void {
	loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler, false, 0, true);
	var url:String="page.swf";
	var req:URLRequest=new URLRequest(url);
	loader.load(req);
	addChild(loader);
}

function completeHandler(event:Event):void {
	//以下、traceすると、全て、[object MainTimeline]と表示されるが、意味が異なる
	trace(event.target.content);//[object MainTimeline]と表示される→page.swfのMainTimelineの意味
	trace(loader.content);//[object MainTimeline]と表示される→page.swfのMainTimelineの意味
	trace(event.target.content.parent.parent);//[object MainTimeline]と表示される→main.swfのMainTimelineの意味
	
	/*以下、3つの方法で、全て、page.swfのラベル test2 に移動して、停止しますが、
特に、1が、キャストしないのに、有効な理由が分かりません*/
	
	//方法1:従って、page,swfのMainTimeline上の _mcに、メソッドを適用する
	event.target.content._mc.gotoAndStop("test2");//event.target.contentをキャストしなくても、行けてしまうのです。
	
	//方法2:通常通り、MovieClipに、キャストして実行
	//MovieClip(event.target.content)._mc.gotoAndStop("test2");
	
	//方法3:ひろゆきさんの方法で、loader.contentに、キャストして、実行
	//MovieClip(loader.content)._mc.gotoAndStop("test2");

}


AS3.0の理屈を覚えるのは、なかなか、難しいですが、一つ一つ、覚えて行きますので、教えて頂きたいと思います。
ひろゆき
Åê¹ÆNo.42939
投稿日時: 2009-7-14 17:26
ちょんまげら
居住地: 大阪密林
投稿: 3702
使用環境:
10.3.9/10.6.2

CS3/CS4 Pro
Flex 2/3 SDK
Pro8.0
Pro7.2

FlashPlayer
7.0r24/8.0r24/9.0r115/10.0r45
Safari 1.3.2/4.0.4
Firefox 2.0.0.20/3.5.7

MacOS 9.2.2
Flash 4/5
Re: 外部SWFからMC内のラベルを再生する
event.target.content は、DisplayObjectとして返ってきます。
http://livedocs.adobe.com/flash/9.0_jp/ActionScriptLangRefV3/flash/display/LoaderInfo.html#content
loader.content でも、同じです。
http://livedocs.adobe.com/flash/9.0_jp/ActionScriptLangRefV3/flash/display/Loader.html#content

したがって、MovieClipにキャストせず、DisplayObject のままでは、
MovieClip のメソッドである gotoAndPlay が使えない。
ということではないでしょうか。

しかし、event.target.content._mc は、MovieClip として返されるのではないでしょうか?


ということで、次のようになるでしょうか。

もし、page.swf 上に、"test"ラベルがあるならば、
エラー
event.target.content.gotoAndPlay("test");
loader.content.gotoAndPlay("test");

問題なし
MovieClip(event.target.content).gotoAndPlay("test");
MovieClip(loader.content).gotoAndPlay("test");

もし、page.swf 上の _mc (MovieClip) に、"test"ラベルがあるならば、
エラー
loader.content._mc.gotoAndPlay("test");

問題なし
event.target.content._mc.gotoAndPlay("test");
MovieClip(event.target.content)._mc.gotoAndPlay("test");
MovieClip(loader.content)._mc.gotoAndPlay("test");
MovieClip(event.target.content._mc).gotoAndPlay("test");
MovieClip(loader.content._mc).gotoAndPlay("test");
#joykoさんの検証結果を受けて、修正。

機種依存文字の使用は控えましょう。


----------------
質問する際は、回答者に具体的な情報を与えてくださいなのニャ!

joyko
Åê¹ÆNo.42940
投稿日時: 2009-7-14 18:02
常連
居住地: 埼玉県
投稿: 167
使用環境:
WinXP(SP3)
Flash8 Basic
FlashCS3
Flash CS4
Re: 外部SWFからMC内のラベルを再生する
ひろゆきさん、
返信、ありがとうございました!

trace(event.target.content._mc);//[object _mc_1]と表示
trace(loader.content._mc);//エラーと表示

となりました。

同じ(じゃなさそう?)、DisplayObjectをドット演算子でつないでも、こうなるのですね。
event.target.contentは、例のdynamicで、loader.contentは、staticということなのかな?分からないですね。

尚、機種依存文字使用は、つい、筆が滑りましたので、訂正しておきました。
(1) 2 »
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

投稿するにはまず登録を
 
Copyright (C) 2003 FLASH-japan. All rights reserved.
Powered by Xoops