闪光 AS3 |删除或停止功能

Flash AS3 | Removing or Stopping a Function

我需要一个看起来应该是一个非常明显的问题的答案,但我在任何地方都找不到它:

如何停止 Flash AS3 中的功能?对于基本示例,当我按下按钮时,该功能开始工作。当我再次按下按钮时,该功能停止。

更具体地说,我如何将其定制为 if/boolean(或类似)语句,以便 when/while 变量为真,函数开始工作。一旦变量变为假,函数就会停止。当它再次为真时,该过程重复。

有问题的代码是另一个用户帮助我创建的平移功能。

        if(Zoomed == true) {
                MovieClip.y = stage.stageHeight / 2;
                MovieClip.x = stage.stageWidth / 2;
                addEventListener(MouseEvent.MOUSE_MOVE, panFunction);
                function panFunction(me: MouseEvent): void {
                    MovieClip.x = stage.stageWidth / 2 - (stage.mouseX - stage.stageWidth / 2);
                    MovieClip.y = stage.stageHeight / 2 - (stage.mouseY - stage.stageHeight / 2);
                }

}

如您所见,我希望它能在布尔函数 'Zoomed' 为真时激活该函数,并且平移功能起作用。问题是,当我回到 Zoomed == false 时,函数仍然是 运行。我正在寻找如何阻止这种情况发生的方法。

我已经尝试了 'while' 循环,但它最终只是冻结了动画(可能是因为它是一个移动图像并且它试图用这段代码渲染每一帧)。

总结:我需要一种能够打开和关闭功能的方法。或者,能够在 needed/not 需要时添加和删除它应该是一样的。对此的任何帮助将是一个很大的帮助,谢谢!

您需要做的是在您不再需要平移时删除事件侦听器。

类似这样的内容,假设您通过单击更改了 zoomed 的值:

var zoomed:Boolean = false; //a var to store whether we are currently zoomed

//change the zoom on mouse click
addEventListener(MouseEvent.CLICK, zoomClick);

function panFunction(me:MouseEvent): void {
    mc.x = stage.stageWidth / 2 - (stage.mouseX - stage.stageWidth / 2);
    mc.y = stage.stageHeight / 2 - (stage.mouseY - stage.stageHeight / 2);
}

function zoomClick(me:MouseEvent):void {
    zoomed = !zoomed; //toggle the zoomed value

    if(zoomed){
        //we're zoomed, so add the panning mouse move listener
        addEventListener(MouseEvent.MOUSE_MOVE, panFunction);
        //do whatever else you need to when first zoomed.
    }else{
        //no longer zoomed, remove the mouse move listener
        removeEventListener(MouseEvent.MOUSE_MOVE, panFunction);
    }
}

一些注意事项,单词 MovieClip 不是一个好的实例名称,因为它可能与 class 名称冲突 MovieClip,我建议重命名它 mc或其他可以避免以后出现潜在问题的东西。

此外,避免内联函数(其他函数中的函数 declared/contained),它们在附加到事件侦听器时尤其容易出现问题,并且是将内存泄漏引入程序的好方法。