我需要答案似乎应该是一个非常明显的问题,但我无法在任何地方找到它:
如何停止Flash AS3中的功能?对于基本示例,当我按下按钮时,该功能开始工作。当我再次按下按钮时,该功能停止。
更具体地说,我如何将其定制为if / boolean(或类似)语句,以便当变量为true时,函数开始工作。一旦变量变为假,该函数就会停止。当它再次成立时,重复该过程。
有问题的代码是另一个用户为我创建的平移功能。
{{1}}
正如你所看到的,我想要它,以便当布尔函数' Zoomed'确实如此,该功能激活并且平移功能正常工作。问题是,当我回到Zoomed == false时,该函数仍在运行。我正在寻找如何阻止这种情况发生。
我尝试过' while'循环,但它最终只是冻结动画(可能是因为它是一个动态图像,它试图用这个代码渲染每一帧)。
总结:我需要一种方法让一个函数能够打开和关闭。或者,能够添加并在需要/不需要时将其删除也应该相同。对此有任何帮助将是一个很大的帮助,谢谢!
答案 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
或其他内容以避免潜在的以后的问题。
此外,避免使用内联函数(声明/包含在其他函数中的函数),当附加到事件侦听器时它们可能特别成问题,并且是将内存泄漏引入程序的好方法。