Flash AS3 |删除或停止功能

时间:2016-07-14 16:04:12

标签: function actionscript-3 flash

我需要答案似乎应该是一个非常明显的问题,但我无法在任何地方找到它:

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

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

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

{{1}}

正如你所看到的,我想要它,以便当布尔函数' Zoomed'确实如此,该功能激活并且平移功能正常工作。问题是,当我回到Zoomed == false时,该函数仍在运行。我正在寻找如何阻止这种情况发生。

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

总结:我需要一种方法让一个函数能够打开和关闭。或者,能够添加并在需要/不需要时将其删除也应该相同。对此有任何帮助将是一个很大的帮助,谢谢!

1 个答案:

答案 0 :(得分:3)

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

类似这样的内容,假设您在点击时更改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不是一个好的实例名称,因为它可能与类名MovieClip冲突,我建议将其重命名为mc或其他内容以避免潜在的以后的问题。

此外,避免使用内联函数(声明/包含在其他函数中的函数),当附加到事件侦听器时它们可能特别成问题,并且是将内存泄漏引入程序的好方法。