0

我的 AS3 程序有两个功能,一个在宽度和高度发生变化时触发:

stage.addEventListener(Event.RESIZE, resizeListener);
function resizeListener (e:Event):void { 
//some commands
}

第二个在几毫秒后触发一个:

var myTimer:Timer = new Timer(clockUpdate, 0);
myTimer.addEventListener(TimerEvent.TIMER, updateData);
myTimer.start();

function updateData(e:TimerEvent):void {
    trace("AUTOUPDATE");
    trace(e);
}

我还需要手动触发这些功能,比如说当用户按下按钮时,但我不知道在手动调用它们时我必须发送哪些参数。

我只尝试了 resizeListener() 和 updateData() 但当然它没有要求我提供参数。

4

2 回答 2

3

您可以通过提供默认值来使函数中的参数成为可选参数。这是一个通过使用上面的两个函数并使事件参数可选的示例:

function resizeListener(e:Event = null):void { 
    //some commands
}

function updateData(e:TimerEvent = null):void {
    trace("AUTOUPDATE");
    trace(e); 
}

例如,调用resizeListener()现在将执行该函数,并且 的值e将默认为null.

于 2013-02-16T13:20:44.100 回答
1

使 Event 参数可选,resizeListener(e:Event=null)就像 walkietokyo 的答案一样,是一个完全有效且通常方便的解决方案。另一种选择是将您希望在不触发事件的情况下执行的操作放在单独的函数中,该函数可以由事件处理程序调用,也可以从其他任何地方调用。

因此,例如,假设您想要在调整大小时重新排列布局,并且您还想在初始化时或单击按钮时或任何时候进行相同的布局设置,您可以执行以下操作:

stage.addEventListener(Event.RESIZE, resizeListener);
function resizeListener(e:Event):void { 
   rearrangeLayout();
}

function rearrangeLayout():void {
   // The actual rearrangement goes here, instead of in resizeListener. This can be called from anywhere. 
}

采用哪种方法可能是个人喜好问题,也可能因情况而异,实际上,两者都可以。

将事件处理程序和另一个函数中的内容分开的一个好处是,不会出现您必须检查 e:Event 参数是否为空的情况。换句话说,您将在事件处理程序中拥有依赖于事件(如果有)的代码,并在更通用的函数(不是事件处理程序)中拥有独立于事件的代码。

因此,在更一般和示意性的情况下,结构将是这样的:

addEventListener(Event.SOME_EVENT, eventListener);
function eventListener(e:Event):void { 
   // Code that needs the Event parameter goes here (if any).
   // Call other function(s), for the stuff that needs to be done when the event happens.
   otherFunction();
}

function otherFunction():void {
   // Stuff that is not dependent on the Event object goes here, an can be called from anywhere.
}
于 2013-02-16T14:12:27.613 回答