→ kuwood:onEnterFrame好像一次只能處理一個函數耶? 02/20 11:16
→ kuwood:如果我要同時監聽不同事件 該怎麼做呢?@@ 02/20 11:17
你可以把想做的事情都丟到一個Array裡面
var a:Function = function():Void {
trace("function a()");
};
var b:Function = function():Void {
trace("function b()");
};
var c:Function = function():Void {
trace("function c()");
};
var array:Array = [a, b, c];
onEnterFrame = function():Void {
for (var i:Number = 0; i < array.length; i++) {
//應該是不用做轉型,不過做轉型看起來比較安全
Function(array[i])();
}
};
之後如果不想要繼續讓b被執行
就可以把b從array裡面splice掉
array.splice(array.indexOf(b), 1);
想要讓b重新開始被持續持行
就把b給push回去就好
array.push(b);
如果是要把他插到c前面
可以把b再splice回去
array.splice(array.indexOf(c), 0, [b]);
→ kuwood:話說我之前寫成onEnterFrame = a(); 結果只跑一次就沒了 02/20 11:19
→ kuwood:onEnterFrame = a;卻可以持續跑 不知道為何有這差別呢@@" 02/20 11:19
onEnterFrame是一個type為Function的property
所以onEnterFrame = a;
做的是讓onEnterFrame指到a這個function
而onEnterFrame = a();
做的卻是把onEnterFrame指到a()回傳的東西
但是a()回傳的東西是Void
我沒有做過這種事情,但是我大膽假設這跟onEnterFrame = null意義是相同的
至於為什麼會執行一次
是因為你寫了a()
凡是一個function name或者一個指到某個Function的property後面
加上了()就表示你要呼叫他,然後回傳他的值
a()被執行一次就是這樣來的,反而跟"onEnterFrame = "這段沒有什麼關係
--
CJ Cat = Croa'J Cat = Cockroach Cat = 西街凱特 = 蜚蠊貓 = 蟑螂貓
Blog http://cjcat.blogspot.com
Gallery http://cjcat2266.deviantart.com
ptt2 Board CJWorkshop - 阿多比閃光(Adobe Flash)研討區
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.228.85.185
※ 編輯: cjcat2266 來自: 61.228.85.185 (02/20 11:45)
推 kuwood:好詳細的解說 感謝大大^^ 02/20 12:01
推 kuwood:cj大我用indexOf找不到元素在陣列中的位置耶ˊˋ" 02/20 14:29
→ kuwood:也找不到有語法可以用元素名稱取得他在陣列中的位置QQ" 02/20 14:31
→ cjcat2266:噢,看來AS2還沒有Array.indexOf()這個東西 02/20 14:48
→ cjcat2266:那你自己用迴圈找出元素的index應該不難吧 02/20 14:48
→ cjcat2266:for (var i:Number) = 0; i < array.length; i++) 02/20 14:48
→ cjcat2266:if (array[i] == b) trace("found"); 02/20 14:48
推 kuwood:嗯嗯 OK了 感謝~~ 好懷念as3喔QQ 02/20 16:13