计时器不工作 - as3

时间:2014-09-22 15:52:55

标签: actionscript-3 flex timer air

我正在尝试创建一个简单的计时器,它会在一段时间不活动(60秒)后将用户带回登录屏幕。计时器似乎第一次工作正常,它导航用户返回登录屏幕。但是,当我第二次重新登录应用程序时,计时器不起作用,并且用户在60秒后没有导航到登录屏幕。我错过了什么,为什么第二次不能工作?

private var timer:Timer;

override protected function initialize():void
{
    timer = new Timer((1)*60*1000, 1);
    timer.start();
    timer.addEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
    timer.addEventListener(TimerEvent.TIMER_COMPLETE, onTimerComplete);
}

private function onMouseMove(event:MouseEvent):void
{
   timer.removeEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
   timer.reset();
   timer.start();
}

private function onTimerComplete(event:TimerEvent):void
{
  timer.removeEventListener(TimerEvent.TIMER_COMPLETE, onTimerComplete);
  this.owner.showScreen(LOGIN_SCREEN);
  timer.reset();
}

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:4)

从我在提供的代码中看到的,这是我想象的解决方案:

  1. 确保每次用户“登录”
  2. 时都会调用initialize方法
  3. stage上添加/删除鼠标移动侦听器而不是计时器对象(这就是为什么它不起作用,鼠标移动永远不会在非显示对象上触发)< / LI>
  4. timer.removeEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);移至onTimerComplete方法,而不是onMouseMove方法。
  5. 这样,鼠标移动将继续重置计时器,直到计时器完成。当计时器完成时,两个侦听器都将被删除,用户将“退出”。

    当用户重新登录时,您调用initialize并再次添加侦听器。


    您可以尝试使用此方法而不是initialize方法:(假设框架在当前屏幕更改时从舞台中删除屏幕)

    在您发布的类的构造函数中:

    this.addEventListener(Event.ADDED_TO_STAGE, addedToStage);
    this.addEventListener(Event.REMOVED_FROM_STAGE, removedFromStage);
    

    以及其他方法:

    private function addedToStage(e:Event):void {
        timer = new Timer((1)*60*1000, 1);
        timer.start();
        stage.addEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
        timer.addEventListener(TimerEvent.TIMER_COMPLETE, onTimerComplete);
    }
    
    private function removedFromStage(e:Event):void {
        stage.removeEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
        timer.removeEventListener(TimerEvent.TIMER_COMPLETE, onTimerComplete);
    }
    
    private function onMouseMove(event:MouseEvent):void
    {
       timer.reset();
       timer.start();
    }
    
    private function onTimerComplete(event:TimerEvent):void
    {
       this.owner.showScreen(LOGIN_SCREEN);
       timer.reset();
    }
    

答案 1 :(得分:-1)

我怀疑问题是您删除了计时器的事件监听器,您必须重新初始化计时器,还为什么要删除鼠标移动的事件监听器?