【问题标题】:how to stop timers when leaving a "screen"离开“屏幕”时如何停止计时器
【发布时间】:2012-04-03 18:54:09
【问题描述】:

我在一个页面上运行了一些计时器,当我离开该页面时,当页面正在运行时,我无法弄清楚如何停止。

调用来自另一个影片剪辑上的按钮,它正在调用 Main.as 上的函数。

Main.as 中的函数:

public function goToIntro(){

            removeChild(currentScreen); 
            intro = new Intro();
            addChildAt(intro,0);
            currentScreen = intro;



        }

如果在播放任何带有计时器的场景时单击“介绍”按钮,我会收到此错误消息。留言

不会立即出现,它只是在介绍“场景”结束并调用下一个场景时出现。

TypeError: Error #1009: Cannot access a property or method of a null object reference.  
    at MethodInfo-202()  
    at flash.utils::Timer/_timerDispatch()  
    at flash.utils::Timer/tick()  

我在介绍页面上有这段代码,它应该在它被删除时处理清理它。

public function Intro() {

            addEventListener(Event.REMOVED_FROM_STAGE, removedHandler);


private function removedHandler(event:Event):void {



}

我不知道如何从 removedHander 函数中终止计时器。我尝试删除事件侦听器,但这会导致其他错误消息。如果侦听器不为空,我尝试进行测试,然后停止它。这显然永远不会运行(我使用跟踪语句来测试它)。我尝试测试计时器是否正在运行然后停止它,但这也不起作用。

帮助!

另外,我是一个完整的动作脚本和编程新手,所以可以像我 5 岁一样与我交谈。谢谢

【问题讨论】:

  • 在您的 currentScreen 类中添加“removedFromStage”的事件侦听器并停止处理程序中的计时器。

标签: actionscript-3


【解决方案1】:

您可以使用Timer.stop() 调用来停止Timer。您可以在removedHandler 中拨打此电话,如下所示:

private function removedHandler(event:Event):void {
    if (myTimer != null) myTimer.stop();
}

这意味着您必须保留对计时器的引用才能停止它。在这种情况下,引用是myTimer

【讨论】:

  • 我确实做到了这一点,并且根据我的追踪者的说法,新代码从未运行过。我仍然收到同样的错误信息。
  • 所以你是说removedHandler 永远不会被调用? Intro 是被删除的 MovieClip 吗?您的问题听起来好像问题发生在您进入介绍时,而不是在您退出时。除了监听REMOVED_FROM_STAGE,您还可以直接在goToIntro 函数中停止计时器。
  • removedHandler 正在运行,但 If myTimer !=null 位显然从未运行。我研究了 goToIntro 的想法,谢谢!
  • 没问题!如果myTimer != null 没有运行,那是因为myTimer 没有设置在当前范围内。确保在创建计时器时将myTimer 设置在适当的位置:myTimer = new Timer(10, foo);
猜你喜欢
  • 2015-12-14
  • 1970-01-01
  • 2014-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-13
  • 1970-01-01
相关资源
最近更新 更多