闪光 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),它们在附加到事件侦听器时尤其容易出现问题,并且是将内存泄漏引入程序的好方法。
我需要一个看起来应该是一个非常明显的问题的答案,但我在任何地方都找不到它:
如何停止 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),它们在附加到事件侦听器时尤其容易出现问题,并且是将内存泄漏引入程序的好方法。