2016-07-14 75 views
1

我需要的答案似乎应该是一个非常明显的问题,但我无法在任何地方找到它:Flash AS3 |删除或停止功能

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

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

正在讨论的代码是另一个用户帮助为我创建的平移功能。

 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 == false时,该函数仍在运行。我正在寻找如何阻止这种情况的发生。我试过'while'循环,但它最终只是冻结动画(可能是因为它是一个运动图像,它试图渲染每一帧与此代码)。

总结:我需要一种方法可以打开和关闭功能。或者,能够添加并在需要/不需要时删除它应该工作相同。任何帮助,这将是一个很大的帮助,谢谢!

+0

你确定放大会失败吗?你可以交易放大的价值来确定吗? –

+0

*跟踪值 –

+1

也不要将函数定义放在if块中。只需将函数放在其他函数所在的位置,并在该块内部调用它。这可能会解决你的问题。 –

回答

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,我'd建议将其重命名为mc或其他内容,以避免以后出现潜在问题。

另外,避免内联函数(在其他函数中声明/包含的函数),它们在连接到事件监听器时尤其有问题,并且是将内存泄漏引入程序的好方法。

+0

为了将功能绑定到布尔变量(如问题所述),创建一个'set'和一个'get''函数',它可以让你只要布尔变量设置为新值,就自动执行上述代码中的最后一个“if/else” – null

+0

完美工作!非常感谢。我已经完成了这个工作,所以当它从pan函数中点击'取消缩放'时,它会重新定位到原来的位置。到底是什么,非常感谢你。 – Jrex