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

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   コーダーズルーム【スクリプト系】
     動的に配置したMovieClip内の変数が有効になるタイミングは?
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
kenjis
Åê¹ÆNo.46890
投稿日時: 2011-1-23 22:35
新米
居住地:
投稿: 3
使用環境:
WindowsXP
FlashCS5
動的に配置したMovieClip内の変数が有効になるタイミングは?
初めて利用させて頂きます。
OSはWindows、FlashのバージョンはCS5です。



大量のMovieClip(円形の画像"circle")をstageに配置し続け、参照を配列に格納、
配置したMovieClip内には自分を消す関数【circleDelete()】を用意しております。

任意のタイミングで、配列内の全MovieClipに対してcircleDelete()を実行し、画面上のMovieClipを全て消す処理を作っています。



具体的には以下の通りです。
マウスダウンで消去、マウスアップで再開します。


■■メインのタイムライン■■

//円の参照代入用配列
var circle_array:Array = new Array();



//円の追加用タイマー
var testtime:Timer = new Timer(10,0);
testtime.start();


//タイマー間隔に合わせてランダムな位置に円を追加

testtime.addEventListener(TimerEvent.TIMER,circleAdd);

function circleAdd(eve: TimerEvent):void{
	var mc:circle = new circle();
	mc.x = Math.floor(Math.random()*550);
	mc.y = Math.floor(Math.random()*400);
	addChild(mc);
	circle_array.push(mc);
}




//マウスダウンで円の削除
stage.addEventListener(MouseEvent.MOUSE_DOWN,circleDelete);

function circleDelete(eve:MouseEvent):void{
	testtime.removeEventListener(TimerEvent.TIMER,circleAdd);
	for( var i:int = circle_array.length - 1; i >= 0; i--){
		circle_array[i].circleDelete();
	}
	
}

//マウスアップで再開
stage.addEventListener(MouseEvent.MOUSE_UP,restart);

function restart(eve:MouseEvent):void{
	testtime.addEventListener(TimerEvent.TIMER,circleAdd);
}





■■円形のMovieClip"circle"のタイムライン■■

//親の参照用MC作成
var parentMc:MovieClip = MovieClip(parent);	

//テスト用変数
var test:int = 100;

//自分を削除する関数
function circleDelete():void{
	//trace(stage);
	//trace(test);
	//trace(parentMc);

	//自分のインデックス番号調べ
	var no:int = parentMc.circle_array.indexOf(this);
	//自分を配列から削除
	parentMc.circle_array.splice (no,1);				
	parentMc.removeChild(this);
}



上記の処理で"時々"エラーが出るのですが、エラーを出すMovieClipは決まって直近に呼び出して配置したMovieClipです。
traceの結果(上記ではコメント化してます)
1.stageは参照出来る。
2.テスト用に作った変数testが100で初期化しているのに0である。
3.親の参照用に用意した変数parentMcがnullである。

という訳で、MovieClipがnewされた瞬間に中の変数が有効になっていないような気がするのですが、どのようなタイミングで有効になるのでしょうか。
また、エラーを出さずに上記のような処理をする事は可能でしょうか。


自分なりに色々検証したり調べてみたのですが、これ以上分かりませんでした。
参考サイトのURLだけでも構いませんのでどなたか御教授頂ければ幸いです。
野中文雄
Åê¹ÆNo.46891
投稿日時: 2011-1-23 23:13
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: 動的に配置したMovieClip内の変数が有効になるタイミングは?
拙著『ActionScript 3.0プロフェッショナルガイド』Chapter 2「スクリプトによるアニメーション」(書籍紹介ページにPDFプレビューを公開)p.059より引用:
スクリプトには、実行の順序があります。フレームアクションは、親のタイムラインから先に処理されます。つまり、最初にメインタイムラインのフレームアクション(図02-017)が実行され、その後ムービークリップのフレームアクション(スクリプト02-006)が処理されるのです。

引用:
kenjisさんは書きました:
初めて利用させて頂きます。
OSはWindows、FlashのバージョンはCS5です。
...[中略]...
上記の処理で"時々"エラーが出るのですが、エラーを出すMovieClipは決まって直近に呼び出して配置したMovieClipです。
traceの結果(上記ではコメント化してます)
1.stageは参照出来る。
2.テスト用に作った変数testが100で初期化しているのに0である。
3.親の参照用に用意した変数parentMcがnullである。

という訳で、MovieClipがnewされた瞬間に中の変数が有効になっていないような気がするのですが、どのようなタイミングで有効になるのでしょうか。


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

kenjis
Åê¹ÆNo.46892
投稿日時: 2011-1-23 23:47
新米
居住地:
投稿: 3
使用環境:
WindowsXP
FlashCS5
Re: 動的に配置したMovieClip内の変数が有効になるタイミングは?
Fumio様
ご返答有難う御座います。
スクリプトの実行順序に関してはある程度理解しております。
今回の事例だとエラー時点でstageが参照出来る状態である事から、newでの生成、addChildで表示リストに追加まではされている状態にはなっていると思います。
にもかかわらず変数が有効になっていないので今回質問させて頂きました。
野中文雄
Åê¹ÆNo.46893
投稿日時: 2011-1-23 23:52
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: 動的に配置したMovieClip内の変数が有効になるタイミングは?
引用したPDFはお読みいただきましたか。「newでの生成、addChildで表示リストに追加まではされている状態」であっても、第1フレームアクションが実行されていなければ「変数」に値は入りません。

■■メインのタイムライン■■
var mc:circle = new circle();
addChild(mc);
mc.circleDelete()


■■円形のMovieClip"circle"のタイムライン■■
trace("executing...");
//親の参照用MC作成
var parentMc:MovieClip = MovieClip(parent);
//テスト用変数
var test:int = 100;
trace(parentMc, test);
//自分を削除する関数
function circleDelete():void {
	trace(stage, test, parentMc, parent);
}

引用:
kenjisさんは書きました:
スクリプトの実行順序に関してはある程度理解しております。
今回の事例だとエラー時点でstageが参照出来る状態である事から、newでの生成、addChildで表示リストに追加まではされている状態にはなっていると思います。
にもかかわらず変数が有効になっていないので今回質問させて頂きました。


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

kenjis
Åê¹ÆNo.46894
投稿日時: 2011-1-24 0:22
新米
居住地:
投稿: 3
使用環境:
WindowsXP
FlashCS5
Re: 動的に配置したMovieClip内の変数が有効になるタイミングは?
Fumio様
迅速にご返答頂き有難う御座います。
引用に関しては具体的な例があると思わず、ちゃんと見ておりませんでした。すいません・・。
newされても次のMovieClipの順番が回ってくるまでは内部処理は行われないんですね。
原因が分かってスッキリしました。有難う御座います。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

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