作者cjcat2266 (CJ Cat)
看板Flash
标题Re: [问题] as2如何持续监听一事件?
时间Fri Feb 20 11:41:40 2009
1F:→ kuwood:onEnterFrame好像一次只能处理一个函数耶? 02/20 11:16
2F:→ 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]);
3F:→ kuwood:话说我之前写成onEnterFrame = a(); 结果只跑一次就没了 02/20 11:19
4F:→ 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)
5F:推 kuwood:好详细的解说 感谢大大^^ 02/20 12:01
6F:推 kuwood:cj大我用indexOf找不到元素在阵列中的位置耶ˊˋ" 02/20 14:29
7F:→ kuwood:也找不到有语法可以用元素名称取得他在阵列中的位置QQ" 02/20 14:31
8F:→ cjcat2266:噢,看来AS2还没有Array.indexOf()这个东西 02/20 14:48
9F:→ cjcat2266:那你自己用回圈找出元素的index应该不难吧 02/20 14:48
10F:→ cjcat2266:for (var i:Number) = 0; i < array.length; i++) 02/20 14:48
11F:→ cjcat2266:if (array[i] == b) trace("found"); 02/20 14:48
12F:推 kuwood:嗯嗯 OK了 感谢~~ 好怀念as3喔QQ 02/20 16:13