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

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   コーダーズルーム【スクリプト系】
     同一フレームでの複数のenterFrameのdelete
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
korosuke
Åê¹ÆNo.20706
投稿日時: 2005-10-8 20:34
新米
居住地:
投稿: 5
使用環境:
Windows XP Pro
Flash MX2004 Pro
同一フレームでの複数のenterFrameのdelete
こんばんは。

ひとつのフレーム上に
onEnterFrameのfunctionをいくつかおいている場合、
そのうちのひとつだけをdeleteすることはできないでしょうか?

よろしくおねがいします。
野中文雄
Åê¹ÆNo.20707
投稿日時: 2005-10-8 20:39
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: 同一フレームでの複数のenterFrameのdelete
具体的に何をされようとしているのか、想像できません。結論として、functiondeleteすることは、できると思います。
引用:
korosukeさんは書きました:
ひとつのフレーム上に
onEnterFrameのfunctionをいくつかおいている場合、
そのうちのひとつだけをdeleteすることはできないでしょうか?


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

korosuke
Åê¹ÆNo.20715
投稿日時: 2005-10-9 0:55
新米
居住地:
投稿: 5
使用環境:
Windows XP Pro
Flash MX2004 Pro
Re: 同一フレームでの複数のenterFrameのdelete
すいません、意味不明ですね。。
というかなにか勘違いしてるみたいです・・・。
例としてあまりよろしくないかと思いますが、
以下のようなコードを書いて実行してみたところ、
fnc1のenterFrameは実行されませんでした。
fnc2のenterFrameで上書き(?)されているのでしょうか。

function fnc1() {
trace("fnc1");
this.onEnterFrame = function() {
cnt1++;
trace("cnt1__"+cnt1);
if (cnt1>10) {
delete onEnterFrame;
}
};
}
function fnc2() {
trace("fnc2");
this.onEnterFrame = function() {
cnt2++;
trace("cnt2__"+cnt2);
if (cnt2>20) {
delete onEnterFrame;
}
};
}
var cnt1 = 0;
var cnt2 = 0;
fnc1();
fnc2();

同じフレーム上ではひとつのenterFrameしか実行できないということでしょうか?

色々と理解不足でこの説明もわかりにくくてすいません。
よろしくお願いします。
野中文雄
Åê¹ÆNo.20717
投稿日時: 2005-10-9 2:47
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: 同一フレームでの複数のenterFrameのdelete
MovieClip.onEnterFrameイベントハンドラは、MovieClipのメソッドです。設定は代入文ですので、その点を捉えればプロパティと同じ性質をもちます。

this._x = 0;
this._x = 100;

結果は、後に代入した値が設定され、その前の値は上書きされます。

参考:「メソッドもプロパティ」(PDF/約280KB)
引用:
korosukeさんは書きました:
以下のようなコードを書いて実行してみたところ、
fnc1のenterFrameは実行されませんでした。
fnc2のenterFrameで上書き(?)されているのでしょうか。

同じ「MovieClipインスタンス」には、1度にひとつのMovieClip.onEnterFrameメソッドしか設定できません。
引用:
同じフレーム上ではひとつのenterFrameしか実行できないということでしょうか?


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

korosuke
Åê¹ÆNo.20718
投稿日時: 2005-10-9 3:00
新米
居住地:
投稿: 5
使用環境:
Windows XP Pro
Flash MX2004 Pro
Re: 同一フレームでの複数のenterFrameのdelete
ご回答ありがとうございます。
まだなんとなくではありますが理解できました。

それが適切かどうかはわかりませんが、複数のenterFrameを設定しようと思ったら、
別のMovieClipを置いてそこに設定する、
という方法になるということでしょうか。

ありがとうございました。
野中文雄
Åê¹ÆNo.20719
投稿日時: 2005-10-9 3:29
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: 同一フレームでの複数のenterFrameのdelete
そういうことになります。その場合、ターゲットのMovieClipは空で差支えないでしょうから、MovieClip.createEmptyMovieClip()メソッドでインスタンスを生成してもよいと思います。
引用:
korosukeさんは書きました:
それが適切かどうかはわかりませんが、複数のenterFrameを設定しようと思ったら、
別のMovieClipを置いてそこに設定する、
という方法になるということでしょうか。

もうひとつの考え方として、名前のある通常のfunctionとして定義した処理を、MovieClip.onEnterFrameメソッドから呼出すという方法もあります。
function fnc1() {
	trace("fnc1");
	xSetOnEnterFrame(xToDoForFnc1);
}
function fnc2() {
	trace("fnc2");
	xSetOnEnterFrame(xToDoForFnc2);
}
function xToDoForFnc1() {
	cnt1++;
	trace("cnt1__"+cnt1);
	if (cnt1>10) {
		xDeleteOnEnterFrame(arguments.callee);
	}
}
function xToDoForFnc2() {
	cnt2++;
	trace("cnt2__"+cnt2);
	if (cnt2>20) {
		xDeleteOnEnterFrame(arguments.callee);
	}
}
function xSetOnEnterFrame(myFunction) {
	if ((typeof functions_array) != "object") {
		functions_array = new Array();
	}
	functions_array.push(myFunction);
	if (this.onEnterFrame == undefined) {
		this.onEnterFrame = function() {
			var nLength = functions_array.length;
			if (nLength<1) {
				delete this.onEnterFrame;
			}
			for (var i = 0; i<nLength; ++i) {
				functions_array[i]();
			}
		};
	}
}
function xDeleteOnEnterFrame(myFunction) {
	var nLength = functions_array.length;
	for (var i = 0; i<nLength; ++i) {
		if (functions_array[i] == myFunction) {
			functions_array.splice(i, 1);
		}
	}
}
var cnt1 = 0;
var cnt2 = 0;
fnc1();
fnc2();


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

korosuke
Åê¹ÆNo.20745
投稿日時: 2005-10-10 23:42
新米
居住地:
投稿: 5
使用環境:
Windows XP Pro
Flash MX2004 Pro
Re: 同一フレームでの複数のenterFrameのdelete
ご返信ありがとうございます。
空MovieClipを作る方法は簡単でよさそうですね。
二つ目の方法は目から鱗でございました。
大変勉強になりました。ありがとうございます。
野中文雄
Åê¹ÆNo.20746
投稿日時: 2005-10-11 4:25
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: 同一フレームでの複数のenterFrameのdelete
Flash Player 7以降でしたら、OnEnterFrameBeaconクラスを使う手もありますね。MovieClip.onEnterFrameイベントで複数の関数を呼出したいという要望には近いと思われます。
import mx.transitions.OnEnterFrameBeacon;
OnEnterFrameBeacon.init();
function fnc1() {
	trace("fnc1");
	obj1 = new Object();
	MovieClip.addListener(obj1);
	obj1.onEnterFrame = function() {
		cnt1++;
		trace("cnt1__"+cnt1);
		if (cnt1>10) {
			MovieClip.removeListener(obj1);
		}
	};
}
function fnc2() {
	trace("fnc2");
	obj2 = new Object();
	MovieClip.addListener(obj2);
	obj2.onEnterFrame = function() {
		cnt2++;
		trace("cnt2__"+cnt2);
		if (cnt2>20) {
			MovieClip.removeListener(obj2);
		}
	};
}
var cnt1 = 0;
var cnt2 = 0;
fnc1();
fnc2();


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

korosuke
Åê¹ÆNo.20840
投稿日時: 2005-10-16 0:07
新米
居住地:
投稿: 5
使用環境:
Windows XP Pro
Flash MX2004 Pro
Re: 同一フレームでの複数のenterFrameのdelete
野中さま

ご助言ありがとうございます。
ActionScript2.0、でしょうか?
ぜんぜん勉強できてません。。
この機に新たな関数をいろいろ見たのですが、便利そうなのがありますね。
loadClipとかprintJobとか。
いろいろと教えていただきありがとうございました。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

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