Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 闪光AS3。删除EventListener的问题_Actionscript 3_Flash_Function_Events - Fatal编程技术网

Actionscript 3 闪光AS3。删除EventListener的问题

Actionscript 3 闪光AS3。删除EventListener的问题,actionscript-3,flash,function,events,Actionscript 3,Flash,Function,Events,所以我这里有点问题。我将在代码中使用假变量名,以使其更简单。但是,我创建了一个函数,该函数在某些条件下被调用一次,而这些条件对于指定并不重要。此函数创建的变量本身就是函数。然后,我为这个函数变量调用一个计时器eventListener,以在“循环”中调用它。这对那部分有效。但是,我想删除这个事件侦听器,但是它不能识别这个计时器函数中的函数变量(我作为参数发送的)。它显示为null,这意味着我无法删除eventListener,并且该函数将永远被调用。有什么解决办法吗 p.S.myTimer是一个

所以我这里有点问题。我将在代码中使用假变量名,以使其更简单。但是,我创建了一个函数,该函数在某些条件下被调用一次,而这些条件对于指定并不重要。此函数创建的变量本身就是函数。然后,我为这个函数变量调用一个计时器eventListener,以在“循环”中调用它。这对那部分有效。但是,我想删除这个事件侦听器,但是它不能识别这个计时器函数中的函数变量(我作为参数发送的)。它显示为null,这意味着我无法删除eventListener,并且该函数将永远被调用。有什么解决办法吗

p.S.myTimer是一个随处可见的公共变量,我得到了一个1010错误

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
中)

有趣的是,我不得不复制并粘贴它,因为我认为它确实可以工作。也许有人能解释一下。但是,如果这不起作用,那么有什么必要用这种方式制作呢?难道你不能改变你的代码,让函数不返回吗?我之所以这么说,是因为我对这个解释也很好奇。