作者cjcat2266 (CJ Cat)
看板Flash
標題Re: [問題] 一個簡化程式的問題
時間Tue Jul 17 05:53:25 2012
[追加]
補上事後寫的AS3 Event Listener Delegtes詳細文章
http://allenchou.net/2012/07/actionscript-3-0-event-listener-delegates/
可以考慮把參數和function reference包到物件裡
這個技巧就是所謂的"委派" (delegate)
//in delegate.as
package
{
public function delegate(func:Function, ...params):Function
{
return new Delegate(func, params).invoke;
}
}
import flash.events.Event;
class Delegate
{
private var func_ :Function;
private var params_ :Array;
public function Delegate(func:Function, ...params)
{
func_ = func;
params_ = params;
}
public function invoke(e:Event):void
{
func_.apply(null, params_);
}
}
//end of Delegate.as
//in time line
function myListener(i:int):void
{
gotoAndPlay(i);
}
for (var i:int = 0; i < 3; ++i)
{
addEventListener
(
MouseEvent.CLICK,
delegate(myListener, i)
);
}
當然,如果你的myListener裡面只有呼叫gotoAndPlay的話
其實根本不用額外宣告myListener這個function
直接傳入gotoAndPlay就可以了
addEventListener
(
MouseEvent.CLICK,
delegate(gotoAndPlay, i);
);
--
Blog
http://blog.cjcat.net
Gallery
http://cjcat2266.deviantart.com
ptt2 Board CJWorkshop
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 72.5.59.140
※ 編輯: cjcat2266 來自: 72.5.59.140 (07/17 06:57)
→ cjcat2266:補上含詳細說明的blog連結 :) 07/17 06:58
※ 編輯: cjcat2266 來自: 72.5.59.140 (07/17 07:16)
推 sayaku0210:有神!快推!! 07/17 12:36
推 ann263028:研究中 先給推 07/17 13:02
推 sayaku0210:不過這時func_應該可以直接寫成func_(params_) 07/17 13:06
→ cjcat2266:不行,因為params_是陣列,要用Function.apply傳入 07/17 13:33
→ sayaku0210:不過照我那樣寫丟值進去可執行耶~@@~難道他會自己轉換? 07/17 13:46
→ sayaku0210:當然直接myListener([1]);會直接掛掉! 07/17 13:48
→ sayaku0210:還蠻神奇的 07/17 13:50
→ cjcat2266:樓上是用trace測試嗎? 用trace會自動呼叫Array.toString 07/17 14:44
→ cjcat2266:將Array轉換成 element1, element2, element3 的字串格 07/17 14:44
→ sayaku0210:是用trace沒錯!像是傳入[1]會輸出1,但傳入[1,2]會輸出0 07/17 14:49
→ sayaku0210:所以是trace的原因阿~@@ 07/17 14:49
→ cjcat2266:int([1]) → int("1") → 1 07/17 15:07
→ cjcat2266:int([1, 2]) → int("1, 2") → 0 07/17 15:07
→ cjcat2266:因為"1, 2"非合法數字字串,導致隱晦轉型失敗 07/17 15:08
→ cjcat2266:而使用預設int值,也就是 0 07/17 15:08
→ sayaku0210:不過這樣為什麼第一種不行第二種就可以過,還是搞不懂 07/17 15:12
→ cjcat2266:一切都是隱晦轉型在搞鬼,沒把握的話就別去踩地雷唄 07/17 15:20
→ cjcat2266:乖乖按照正確type來寫最安全 07/17 15:21
→ sayaku0210:感謝CJ神的解惑!! 07/17 15:23