gpt4 book ai didi

apache-flex - 如何在 AS3 中创建自定义 MouseEvent.CLICK 事件(将参数传递给函数)?

转载 作者:行者123 更新时间:2023-12-04 09:38:36 26 4
gpt4 key购买 nike

这个问题不仅与 MouseEvent.CLICK 事件类型有关,而且与 AS3 中已经存在的所有事件类型有关。我阅读了很多关于自定义事件的内容,但直到现在我都不知道如何做我想做的事情。我来解释一下,希望你明白:

这是我的情况的说明:

for(var i:Number; i < 10; i++){
var someVar = i;
myClips[i].addEventListener(MouseEvent.CLICK, doSomething);
}

function doSomething(e:MouseEvent){ /* */ }

但我希望能够将 someVar 作为参数传递给 doSomething。所以我试过这个:
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。因此,每个影片剪辑中的每次单击都会调用 doSomething,并传递 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 事件。

关于apache-flex - 如何在 AS3 中创建自定义 MouseEvent.CLICK 事件(将参数传递给函数)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/426540/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com