这个问题不仅与 MouseEvent.CLICK 事件类型有关,而且与 AS3 中已存在的所有事件类型有关。我阅读了很多有关自定义事件的内容,但直到现在我还不知道如何做我想做的事情。我将尝试解释一下,希望您能理解:
这是我的情况的说明:
for(var i:Number; i < 10; i++){
var someVar = i;
myClips[i].addEventListener(MouseEvent.CLICK, doSomething);
}
function doSomething(e:MouseEvent){ /* */ }
但我希望能够通过someVar作为参数做一点事。所以我尝试了这个:
for(var i:Number; i < 10; i++){
var someVar = i;
myClips[i].addEventListener(MouseEvent.CLICK, function(){
doSomething(someVar);
});
}
function doSomething(index){ trace(index); }
这种方法有效,但不符合我的预期。由于函数闭包,当 MouseEvent.CLICK 事件实际触发时for循环已经结束并且someVar保存最后一个值,数字9在示例中。所以每个影片剪辑中的每次点击都会调用做一点事通过9作为参数。这不是我想要的。
我认为创建自定义事件应该可行,但后来我找不到在触发 MouseEvent.CLICK 事件并将参数传递给它时触发自定义事件的方法。现在我不知道这是否是正确的答案。
我应该做什么以及如何做?
您确实需要扩展事件类以使用额外参数创建您自己的事件。将函数放置在 addEventListener(匿名函数)内会导致内存泄漏,这并不好。
看看下面的内容。
import flash.events.Event;
//custom event class to enable the passing of strings along with the actual event
public class TestEvent extends Event
{
public static const TYPE1 :String = "type1";
public static const TYPE2 :String = "type2";
public static const TYPE3 :String = "type3";
public var parameterText:String;
public function TestEvent (type:String, searchText:String)
{
this.parameterText = searchText;
super(type);
}
}
当您创建一个新事件时,例如
dispatchEvent(new TestEvent(TestEvent.TYPE1, 'thisIsTheParameterText'))" ;
然后你可以像这样监听该事件
someComponent.addEventListener(TestEvent.TYPE1, listenerFunction, true , 0, true);
在函数“listenerFunction”中,event.parameterText 将包含您的参数。
因此,在 myClips 组件内,您将触发自定义事件并侦听该事件,而不是 Click 事件。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)