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

パスワード:


パスワード紛失

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

スレッド表示 | 古いものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
c-geru
Åê¹ÆNo.2455
投稿日時: 2003-12-24 5:38
職人
居住地: 文京区本郷
投稿: 209
使用環境:
10.6.8+ CS5.5
Win7+ CS4
Re: loadMovieで読み込まれたswfの変数を参照
小川です。youichさん、お返事遅れてすみません。

引用:
youichさんは書きました:
mc.__proto__ はMovieClip.prototypeと同じなので、loadが終わって
b.swfのval(mcのval)が出現するまえに他のMovieClipがvalの値を触っても
大丈夫なようにです?。
また、delete(mc.__proto__val)をコメントアウトしてもらったらすべてのMovieClipにaddPropertyが適用されてるのが解ると思います。

この辺を実際に動かして確認してから・・・と思っていたら、忙しさに負けて一週間も過ぎてしまいました
時間できてから、ゆっくり確認してみます。あまりに遅過ぎますが、ひとまずはお礼まで。

#忙しい原因もまたFLASHだったりするのですが・・・。
#量が多過ぎて、このまま年越しかもしれません
youich
Åê¹ÆNo.2179
投稿日時: 2003-12-15 19:43
職人
居住地: kobe
投稿: 349
使用環境:
Tiger
Re: loadMovieで読み込まれたswfの変数を参照
引用:

ちなみに「if(this._name=='mc')」と、インスタンス名をチェックしているのは何故ですか?
この場合に限れば、自明ですよね(なくても動きました)。


mc.__proto__ はMovieClip.prototypeと同じなので、loadが終わって
b.swfのval(mcのval)が出現するまえに他のMovieClipがvalの値を触っても
大丈夫なようにです?。
また、delete(mc.__proto__val)をコメントアウトしてもらったらすべてのMovieClipにaddPropertyが適用されてるのが解ると思います。
mc=createEmptyMovieClip('mc',1);

mc.__proto__.addProperty("val",function(){ },function(x){
										_root.doSomething(x);});
//追加
trace(MovieClip.prototype === mc.__proto__);

mc.loadMovie('b.swf');

_root.doSomething = function(v){
	trace('doSomething: '+ v);
	delete(mc.__proto__.val);
        //これも要りそう
       mc.val = v;
}

//※追加
val = '???';

id = setInterval(function(){
				  val = 'xxx';clearInterval(id);},1000);

id2 = setInterval(function(){
				 trace("value: " + 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')」と、インスタンス名をチェックしているのは何故ですか?
この場合に限れば、自明ですよね(なくても動きました)。
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.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はひょっとして大丈夫なのか・・・と思ってしまったもので。

もし使うならこの方法ってことですね。ありがとうございました。
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が無効になっちゃうということなんですよね・・・。

野中文雄
Åê¹Æ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全てに適用されるということ????


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

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

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

(1) 2 »
スレッド表示 | 古いものから 前のトピック | 次のトピック | トップ

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