AS3:如何在MouseEvent监听器中使用带变量的函数?

时间:2014-05-26 21:54:07

标签: actionscript-3 mouseevent

通常使用像这样的鼠标事件监听器:

MyButton.addEventListener(MouseEvent.MOUSE_UP, MyFunction);
function MyFunction(event:MouseEvent):void
{
// my function codes
//...
//...
}

但我想在我的函数中使用一个变量,如下所示:

 //var Tx:Number = any Formula;
 MyButton.addEventListener(MouseEvent.MOUSE_UP, MyFunction(Tx));
 function MyFunction(event:MouseEvent,T:Number):void
 {
    if ( T == 1 ) { ... }
    if ( T == 2 ) { ... }
    if ( T == 3 ) { ... }
 }

我该怎么做?

2 个答案:

答案 0 :(得分:0)

我想你会将听众附加到不同的按钮/动画片段。然后,访问event.currentTarget并更改变量的值。

button1.addEventListener(MouseEvent.MOUSE_UP, doSomething);
button2.addEventListener(MouseEvent.MOUSE_UP, doSomething);
function doSomething(event:MouseEvent):void {
var str:String;
if (event.currentTarget.name == 'button1')
str = 'one';
else
str = 'two';
}

或类似的东西。

答案 1 :(得分:0)

在我看来,你想要创建一个闭包

function process(t:Number)
{
    return function(event:MouseEvent) {
        if ( t == 1 ) { ... }
        if ( t == 2 ) { ... }
        if ( t == 3 ) { ... }
    }
}

MyButton.addEventListener(MouseEvent.MOUSE_UP, process(1));

这将从" process"返回一个函数。它将作为事件监听器并包含参数T。

ps:即使ActionScript允许提升函数(即在定义它们之前调用的函数),我认为这是一种糟糕的风格。还可以使用小写作为参数名称。大写名称通常暗示这是一个Type。