作者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)
1F:→ cjcat2266:补上含详细说明的blog连结 :) 07/17 06:58
※ 编辑: cjcat2266 来自: 72.5.59.140 (07/17 07:16)
2F:推 sayaku0210:有神!快推!! 07/17 12:36
3F:推 ann263028:研究中 先给推 07/17 13:02
4F:推 sayaku0210:不过这时func_应该可以直接写成func_(params_) 07/17 13:06
5F:→ cjcat2266:不行,因为params_是阵列,要用Function.apply传入 07/17 13:33
6F:→ sayaku0210:不过照我那样写丢值进去可执行耶~@@~难道他会自己转换? 07/17 13:46
7F:→ sayaku0210:当然直接myListener([1]);会直接挂掉! 07/17 13:48
8F:→ sayaku0210:还蛮神奇的 07/17 13:50
9F:→ cjcat2266:楼上是用trace测试吗? 用trace会自动呼叫Array.toString 07/17 14:44
10F:→ cjcat2266:将Array转换成 element1, element2, element3 的字串格 07/17 14:44
11F:→ sayaku0210:是用trace没错!像是传入[1]会输出1,但传入[1,2]会输出0 07/17 14:49
12F:→ sayaku0210:所以是trace的原因阿~@@ 07/17 14:49
14F:→ cjcat2266:int([1]) → int("1") → 1 07/17 15:07
15F:→ cjcat2266:int([1, 2]) → int("1, 2") → 0 07/17 15:07
16F:→ cjcat2266:因为"1, 2"非合法数字字串,导致隐晦转型失败 07/17 15:08
17F:→ cjcat2266:而使用预设int值,也就是 0 07/17 15:08
18F:→ sayaku0210:不过这样为什麽第一种不行第二种就可以过,还是搞不懂 07/17 15:12
19F:→ cjcat2266:一切都是隐晦转型在搞鬼,没把握的话就别去踩地雷呗 07/17 15:20
20F:→ cjcat2266:乖乖按照正确type来写最安全 07/17 15:21
21F:→ sayaku0210:感谢CJ神的解惑!! 07/17 15:23