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

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   コーダーズルーム【スクリプト系】
     loadMovieで読み込まれたswfの変数を参照
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
c-geru
Åê¹ÆNo.2044
投稿日時: 2003-12-10 15:53
職人
居住地: 文京区本郷
投稿: 209
使用環境:
10.6.8+ CS5.5
Win7+ CS4
loadMovieで読み込まれたswfの変数を参照
小川です。

元のswf(a.swf)の中にあるムービークリップ(mc1)に外部swf(b.swf)をロードして、
a.swfからb.swfの中にある変数(_root.val1)を参照しようとしています。

#_root.val1は1フレに定義。

onClipEvent(data)やgetBytesLoaded()でロード終了をチェックしていますが、
ロード終了時のタイミングでは、_root.val1は生成されていないため参照できません。

a.swfから_root.val1を参照するタイミングを判断する方法はあるでしょうか。現在可能だとわかっているのは・・・

・_root.val1をダイナミックテキストでステージ上に配置すれば、ロード終了のタイミングで取得可能。
・b.swfを2フレ以上にしておいて、_root.b._currentframe>1がtrueになるタイミングで取得可能。

の2つです。他にいい方法はあるでしょうか?

#b.swf側でチェックすれば問題ないことはわかっているのですが、
#仕様の都合上できるだけb.swfに手を加えずに、どうにかする方法がないか・・・
#ということなのです。他になさそうな気もするのですが・・・。

よろしくお願いします。
c-geru
Åê¹ÆNo.2047
投稿日時: 2003-12-10 17:24
職人
居住地: 文京区本郷
投稿: 209
使用環境:
10.6.8+ CS5.5
Win7+ CS4
Re: loadMovieで読み込まれたswfの変数を参照
小川です。自己レスです。

引用:
c-geruさんは書きました:
a.swfから_root.val1を参照するタイミングを判断する方法はあるでしょうか。


あとはローディング後に「_root.val1 != undefined」のチェックを行って、生成されるまで待つ・・・ということですね。
たぶんこれぐらいでしょうか。

他にも方法があれば、ご意見よろしくお願いします。
youich
Åê¹ÆNo.2048
投稿日時: 2003-12-10 17:54
職人
居住地: kobe
投稿: 349
使用環境:
Tiger
Re: loadMovieで読み込まれたswfの変数を参照
引用:

あとはローディング後に「_root.val1 != undefined」のチェックを行って、生成されるまで待つ・・・ということですね。
たぶんこれぐらいでしょうか。

他にも方法があれば、ご意見よろしくお願いします。


同じく監視系すけど、watchも使えるんじゃないでしょうか?

mc = this.createEmptyMovieClip("mc", 1);

_root.watch("val",function(id,o,n){
						   trace(n);
						   return n;
						   });
mc.loadMovie('b.swf');


----------------
- yo

c-geru
Åê¹ÆNo.2126
投稿日時: 2003-12-13 5:53
職人
居住地: 文京区本郷
投稿: 209
使用環境:
10.6.8+ CS5.5
Win7+ CS4
Re: loadMovieで読み込まれたswfの変数を参照
小川です。

youichさん、ありがとうございます。
いろいろあって(^^;、返事遅くなりました。

引用:
youichさんは書きました:
同じく監視系すけど、watchも使えるんじゃないでしょうか?

watch知りませんでした・・・。
使えそうですね。

ただサンプルコードは動きませんでした。
mc = this.createEmptyMovieClip("mc", 1);

_root.watch("val",function(id,o,n){
						   trace(n);
						   return n;
						   });
mc.loadMovie('b.swf');

「_root.watch」は「this.mc.watch」または「mc.watch」ではないんでしょうか。ただどちらでも動いてないんですが・・・。「_root.watch」とすると配下のMovieClip全てに適用されるということ????

watch自体は下記のようなスクリプトで動作確認しました。
なので変数が未定義なのが悪い・・・ということではないようですが。
onClipEvent (load) {
	//
	this.onPress = function() {
		this.gName = 123;
	};
	this.watch("gName", function (id, o, n) {
		trace("----:"+id);
		trace("old:"+o);
		trace("new:"+n);
		return n;
	});
}

youich
Åê¹ÆNo.2135
投稿日時: 2003-12-13 14:41
職人
居住地: kobe
投稿: 349
使用環境:
Tiger
Re: loadMovieで読み込まれたswfの変数を参照
小川さん、どうもです?。
引用:

「_root.watch」は「this.mc.watch」または「mc.watch」ではないんでしょうか。ただどちらでも動いてないんですが・・・。「_root.watch」とすると配下のMovieClip全てに適用されるということ????


あ?っと、私読み違いしてたかもしれません、
b.swfの中は_root.val = 'xxx';としてるつもりでした。
↓こういう感じです。
http://park10.wakwak.com/~suie/ab.zip

_root.watch("val",function(){..}は
_rootが自分のvalという変数の変化を監視しているという風に思ってます。

_root.watch("val", function (id, o, n) {
	_root.te.text = n;
	return n;
});

createTextField("te",1,100,100,0,0);
te.autoSize = true;
var tf = te.getTextFormat();
tf.size = 48;
tf.font = "Helvetica";
te.setNewTextFormat(tf);

_root.val = 0;
id = setInterval(function(){
					 _root.val += 10;
					 },1000);


----------------
- yo

野中文雄
Åê¹ÆNo.2136
投稿日時: 2003-12-13 15:11
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: loadMovieで読み込まれたswfの変数を参照
ご参考まで: [Object.watch]
引用:
c-geruさんは書きました:
watch知りませんでした・・・。
使えそうですね。

もしかすると、こういうことですか?
// SWF: b.swf
// _root: メインタイムライン
// 第1フレームアクション
val1 = "my value";
// _root.val1 = "root value";

// SWF: a.swf
// フレームアクション
_mc = this.createEmptyMovieClip("mc", 1);
_mc.loadMovie('b.swf');

だとすると、mc.val1に対するObject.watchの設定は、外部SWFのロードによりクリアされてしまうと思います。
引用:
ただサンプルコードは動きませんでした。
...
「_root.watch」は「this.mc.watch」または「mc.watch」ではないんでしょうか。ただどちらでも動いてないんですが・・・。「_root.watch」とすると配下のMovieClip全てに適用されるということ????


----------------
 

c-geru
Åê¹ÆNo.2137
投稿日時: 2003-12-13 15:17
職人
居住地: 文京区本郷
投稿: 209
使用環境:
10.6.8+ CS5.5
Win7+ CS4
Re: loadMovieで読み込まれたswfの変数を参照
小川です。
youichさん、ありがとうございます〜。

引用:
あ?っと、私読み違いしてたかもしれません、
b.swfの中は_root.val = 'xxx';としてるつもりでした。
↓こういう感じです。
http://park10.wakwak.com/~suie/ab.zip

_root.watch("val",function(){..}は
_rootが自分のvalという変数の変化を監視しているという風に思ってます。

サンプルありがとうございます。理解しました。
私のやりたかったのは、_rootが子のval(_root.b.val)という変数の変化を監視したい...ということでした。

あらかじめload用のMC(インスタンス名:cube)に・・・
onClipEvent (load) {
	this.watch("gName", function (id, o, n) {
		trace("----:"+id);
		trace("old:"+o);
		trace("new:"+n);
		return n;
	});
}

としておいて、親側のフレームで・・・
this.cube.loadMovie('b.swf');

としてやれば大丈夫でした。やはりonClipEvent()にしておかないと、loadMovie()されるタイミングでwatchが無効になっちゃうということなんですよね・・・。

c-geru
Åê¹ÆNo.2138
投稿日時: 2003-12-13 15:27
職人
居住地: 文京区本郷
投稿: 209
使用環境:
10.6.8+ CS5.5
Win7+ CS4
Re: loadMovieで読み込まれたswfの変数を参照
小川です。野中さん、どうもです〜。
引用:

Fumioさんは書きました:
もしかすると、こういうことですか?
// SWF: b.swf
// _root: メインタイムライン
// 第1フレームアクション
val1 = "my value";
// _root.val1 = "root value";

// SWF: a.swf
// フレームアクション
_mc = this.createEmptyMovieClip("mc", 1);
_mc.loadMovie('b.swf');

だとすると、mc.val1に対するObject.watchの設定は、外部SWFのロードによりクリアされてしまうと思います。

そうです。まさにそのとおりです。
先日野中さんのポストをみていたんですが、watchはひょっとして大丈夫なのか・・・と思ってしまったもので。

もし使うならこの方法ってことですね。ありがとうございました。
youich
Åê¹ÆNo.2162
投稿日時: 2003-12-15 10:49
職人
居住地: kobe
投稿: 349
使用環境:
Tiger
Re: loadMovieで読み込まれたswfの変数を参照
引用:

あらかじめload用のMC(インスタンス名:cube)に・・・
onClipEvent (load) {
	this.watch("gName", function (id, o, n) {
		trace("----:"+id);
		trace("old:"+o);
		trace("new:"+n);
		return n;
	});
}

としておいて、親側のフレームで・・・
this.cube.loadMovie('b.swf');

としてやれば大丈夫でした。やはりonClipEvent()にしておかないと、loadMovie()されるタイミングでwatchが無効になっちゃうということなんですよね・・・。


あ?なるほど、解りました。野中さんの想像どおりでしたね。
しかし、3人寄れば文殊の知恵とでもいいましょうか、
動くようになりましたね(^^;

で、また私考えました、よりリスキーです。
mc=createEmptyMovieClip('mc',1);

mc.__proto__.addProperty("val",function(){ },function(x){
					if(this._name=='mc')_root.doSomething(x);});

mc.loadMovie('b.swf');
_root.doSomething = function(v){
	trace(v);
	delete(mc.__proto__.val);
}


// ----異常ないのかテスト(^^;
id = setInterval(function(){
						  val = 'xxx';clearInterval(id);},1000);


id2 = setInterval(function(){
						  trace(val);clearInterval(id2);},2000);



----------------
- yo

c-geru
Åê¹ÆNo.2177
投稿日時: 2003-12-15 18:25
職人
居住地: 文京区本郷
投稿: 209
使用環境:
10.6.8+ CS5.5
Win7+ CS4
Re: loadMovieで読み込まれたswfの変数を参照
小川です。

引用:
あ?なるほど、解りました。野中さんの想像どおりでしたね。

ありがとうございました>youichさん、野中さん

引用:
で、また私考えました、よりリスキーです。

__proto__で定義したプロパティなら大丈夫なんですね。

これは・・・

1.__proto__.addPropertyでvalプロパティを定義
2.b.swfがロードされると、b.swfのルートにあるvalの値で上書きされる。
3.valが上書きされたので、上記1.で定義されたsetFunc(function(x))が呼び出される。

ということですよね。

#prototype絡みはなかなか理解がしにくくて・・・

ちなみに「if(this._name=='mc')」と、インスタンス名をチェックしているのは何故ですか?
この場合に限れば、自明ですよね(なくても動きました)。
(1) 2 »
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

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