看板 Flash 關於我們 聯絡資訊
[追加] 補上事後寫的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
sayaku0210:所以http://goo.gl/aaR6T 也是這個原因囉? 07/17 14:55
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