2011-01-25 52 views

回答

1

AS3超時(例如setTimout)像JavaScript一樣。 use of setTimeout in AS is talked about here。給定兩個日期(現在和何時應該觸發警報),以毫秒爲單位計算差值並將其用作超時參數。

或者(並且效率低下,但不足以睜大眼睛),setTimeout可以每分鐘運行一次,如果它是「神奇的時間」(或者在先前的時間間隔之前過去!記住需要2倍的頻率觀察所有的變化,並且可能發生時鐘偏移...)然後發出警報。

請注意,有一些限制,如AS主機在超時或時鐘週期期間關閉。可能沒有DST擔心這裏,但夏時制問題來處理日期/時間。

快樂編碼。

編輯: AS還有Timer class它是setTimeout/setInterval/clearTimeout/clearInterval功能的包裝。無論如何,如果「使用對象」是首選。

2

我想說你創建一個循環來檢查Date對象的當前時間。

package { 
import flash.display.Sprite; 
import flash.utils.clearInterval; 
import flash.utils.setInterval; 
public class TimeCheck extends Sprite 
{ 
    private var interval:int; 
    public function TimeCheck() 
    { 
     interval = setInterval(checkTime, 1000);//check performed every second 
     checkTime(); 
    } 
    private function checkTime():void 
    { 
     var date:Date = new Date(); 
     if (date.hours == 23 && date.minutes == 55)//actual time check 
     { 
      clearInterval(interval);//kills the loop 
      //... do something ... 
     } 
    } 
} 
} 

請注意,這是執行客戶端,因此將使用客戶端時間。可能有辦法將它同步到服務器時間。

希望它有助於

+1

+1良好的代碼文章。但是,*檢查間隔必須至少是頻率的兩倍或者一分鐘可能會丟失!*(或者至少這是我從基礎物理學中記得的,但我無法在網上找到任何信息......)無論如何,確定在setTimeout中建立鬆弛:假設時間是'23:54.99',下一個超時*需要稍微超過1000ms才能運行*,因此接下來會看到值'23:56.01`並跳過23.55。 ?`。雖然這是一個邊緣案例,但可能會發生。增加觀察頻率,嘗試糾正觀察者時間,和/或觀察23:55是否在「當時」和「現在」之間。 – 2011-01-28 03:34:39

0

我沒有測試過,但這樣的事情應該工作...

var eventDate:Date = new Date(); 
eventDate.setHours(23, 55); 
var now:Date = new Date(); 

var delay:Number = eventDate.time - now.time; 

if(delay > 0)//if we haven't yet passed 23:55 
{ 
    var timer:Timer = new Timer(delay , 1); 
    timer.addEventListener(TimerEvent.TIMER , yourMethod); 
    timer.start(); 
} 
0

我相信上述解決方案的工作;然而,它們在性能方面似乎非常昂貴。我有一個(相對)優雅和直截了當的雙線程。該解決方案使用匿名函數,即客戶端時間,並假定給出了一個參數startDate:Date。我沒有測試過,所以可能會出現一個簡單的邏輯錯誤,但這個想法應該給一些想法。

var timer:Timer = (new Timer(startDate.time - (new Date()).time, 1)).addEventListener(TimerEvent.TIMER, function():void { 
    // This area is called after the allocated time. 
}); 
timer.start(); 
相關問題