看板 Flash 關於我們 聯絡資訊
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