2014-09-22 83 views
1

我正在嘗試創建一個簡單的計時器,該計時器在一段不活動時間(60秒)後將用戶帶回登錄屏幕。計時器似乎第一次正常工作,它將用戶導航回登錄屏幕。但是,當我第二次重新登錄到應用程序時,計時器不起作用,並且用戶在60秒後沒有導航到登錄屏幕。我錯過了什麼,爲什麼第二次不起作用?計時器不能正常工作 - as3

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(); 
} 

任何幫助,將不勝感激。

回答

4

從我的提供,這裏的代碼中看到的就是我想象中的解決辦法是:

  1. 確保initialize方法被調用每次用戶「登錄的」
  2. 添加/取出鼠標移動監聽器stage不定時對象(這就是爲什麼它不能正常工作,鼠標移動將永遠不會觸發非顯示對象)
  3. 移動timer.removeEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);onTimerComplete方法代替方法onMouseMove

這樣,鼠標移動將繼續重置計時器,直到計時器結束。定時器完成後,兩個偵聽器都將被刪除,並且用戶被「註銷」。

當用戶重新登錄時,您可以撥打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(); 
} 
+0

謝謝@LDMS的回覆。我發現initialize()每次用戶登錄時都沒有被調用。我試圖解決這個問題,希望這將解決計時器問題。非常感謝你..! – Sugan88 2014-09-23 10:06:10

+0

我從feathers.controls.screen重寫Initialize()方法。出於某種原因,當我第二次登錄時,不會調用initialize()方法。任何想法爲什麼? – Sugan88 2014-09-23 14:00:24

+0

你必須發佈你的代碼。現在我不知道如何以及何時調用'initialize'方法。我對羽毛庫不熟悉,但看看我看到的這個文檔「在屏幕首次添加到舞臺上時運行一次」。 - 也許你可以使用'Event.ADDED_TO_STAGE'事件來設置你的計時器/監聽器而不是initilize方法 – BadFeelingAboutThis 2014-09-23 16:09:05

-1

我懷疑問題是你刪除了計時器的事件監聽器,你必須重新初始化計時器,你爲什麼要刪除鼠標移動的事件監聽器?

+0

謝謝@ simion314的回覆。我試圖運行應用程序而不刪除鼠標移動事件和計時器事件,它似乎仍然不工作。 – Sugan88 2014-09-23 10:01:12