Actionscript 3 闪光AS3。删除EventListener的问题
所以我这里有点问题。我将在代码中使用假变量名,以使其更简单。但是,我创建了一个函数,该函数在某些条件下被调用一次,而这些条件对于指定并不重要。此函数创建的变量本身就是函数。然后,我为这个函数变量调用一个计时器eventListener,以在“循环”中调用它。这对那部分有效。但是,我想删除这个事件侦听器,但是它不能识别这个计时器函数中的函数变量(我作为参数发送的)。它显示为null,这意味着我无法删除eventListener,并且该函数将永远被调用。有什么解决办法吗 p.S.myTimer是一个随处可见的公共变量,我得到了一个1010错误Actionscript 3 闪光AS3。删除EventListener的问题,actionscript-3,flash,function,events,Actionscript 3,Flash,Function,Events,所以我这里有点问题。我将在代码中使用假变量名,以使其更简单。但是,我创建了一个函数,该函数在某些条件下被调用一次,而这些条件对于指定并不重要。此函数创建的变量本身就是函数。然后,我为这个函数变量调用一个计时器eventListener,以在“循环”中调用它。这对那部分有效。但是,我想删除这个事件侦听器,但是它不能识别这个计时器函数中的函数变量(我作为参数发送的)。它显示为null,这意味着我无法删除eventListener,并且该函数将永远被调用。有什么解决办法吗 p.S.myTimer是一个
public function calledOnce(){
this.myFunction = loopFunction( x, y, "function" );
this.myTimer.addEventListener( TimerEvent.TIMER, this.myFunction );
}
public function loopFunction( refX, refY, refFunction ){
return function( e: Event ){
//Do something
switch( refFunction ){
case "function":
this.myTimer.removeEventListener( TimerEvent.TIMER, this.myFunction );
break;
}
};
}
我相信这与
这个有关。如果你跟踪(这个)
您将得到[objectyourclass]
,但当您在函数中这样做时:
public function loopFunction( refX, refY, refFunction ){
return function( e: Event ){
trace (this);
//Do something
switch( refFunction ){
case "function":
myTimer.removeEventListener( TimerEvent.TIMER, myFunction );
break;
}
};
}
您得到的是[global]
,我感觉您的类对象不再在该范围内。我通过去掉this
并显式声明变量来运行它:
private var myFunction:Function;
private var myTimer:Timer = new Timer (1000);
public function calledOnce(){
myFunction = loopFunction( x, y, "function" );
myTimer.addEventListener( TimerEvent.TIMER, this.myFunction );
}
public function loopFunction( refX, refY, refFunction ){
return function( e: Event ){
//Do something
switch( refFunction ){
case "function":
myTimer.removeEventListener( TimerEvent.TIMER, myFunction );
break;
}
};
}
您需要返回一个现成的函数代码,而不引用那些refX,refY,refFunction
,因为它们在生成的函数中不可用
public function loopFunction( refX, refY, refFunction ){
switch( refFunction ){
case "function":
return function( e: Event ){
//Do something
myTimer.removeEventListener( TimerEvent.TIMER, myFunction );
}
}
}
}
请注意,尽管删除动态生成的侦听器并不容易,但要做到这一点,您首先必须将函数存储在某个位置(您已经有代码将其存储在变量myFunction
中) 有趣的是,我不得不复制并粘贴它,因为我认为它确实可以工作。也许有人能解释一下。但是,如果这不起作用,那么有什么必要用这种方式制作呢?难道你不能改变你的代码,让函数不返回吗?我之所以这么说,是因为我对这个解释也很好奇。