2013-09-21 28 views
4

我怎樣才能得到,因爲午夜1970年1月1日在AS3毫秒的當前數量,而不必使用new操作符?我在問,因爲我需要每秒鐘處理大約100次,並且目前試圖減少堆分配以保持gc低。AS3獲取當前的時間,而無需創建新的對象

+0

是否真的需要每秒100次? – prototypical

+0

Date類似乎有毫秒等設置方法,所以我想你可以手動更新它。如果需要精確度的話,我不確定我是否會相信閃存定時器。 – prototypical

+0

不確定您的使用情況,但此主題出現在本主題的討論中。 http://forum.starling-framework.org/topic/smooth-movement-independent-from-frame-rate – prototypical

回答

3

你應該創建它一次,然後添加毫秒,因爲與getTimer是創造,通過();您還需要一個幫助變量來存儲您的數據創建時間;

package 
{ 
    import flash.display.Sprite; 
    import flash.events.Event; 
    import flash.utils.getTimer; 

    public class Main extends Sprite 
    { 
     private var _myLittleDate:Date; 
     private var _myLittleDateCreationTime:Number; 

     public function Main():void 
     { 
      _myLittleDate = new Date(); //Our first and only object creation 
      _myLittleDateCreationTime = getTimer(); //Store it's creation time 
      addEventListener(Event.ENTER_FRAME, onEnterFrame); //Check function 
     } 

     private function onEnterFrame(e:Event):void 
     { 
      _myLittleDate.time += (getTimer() - _myLittleDateCreationTime); 
      trace(_myLittleDate); //You get valid, refreshed data object here 
      _myLittleDateCreationTime = getTimer(); // Don't forget to update your initial time 
      //It's accurate since method .getTimer() is accurate itself 
      //You can even compare two Data object by creating another and tracing it right here 
     } 
    } 
} 

如果你只需要知道,因爲最後一幀什麼時候已經過去了,不知道星期幾,或者一年,你可以使用getTimer();它自己,它的效率更高,我使用

+0

嘿!這看起來不錯!但我認爲這將是最好不要+ =毫秒,因爲這將在每次迭代中增加一個舍入誤差,並且相反在每次迭代得到原來的時間和getTimer(),並從中計算出當前時間。無論如何,我將此標記爲正確答案,謝謝! – user1282931

+0

這是場「時間」是從1970年1月1日通過的毫秒數,而當你添加具有getTimer()的東西,它會自動重新計算所有需要的數據,如一週中的一天等) – KumoKairo

+0

僅供參考,'getTimer() '返回一個'int'值,而不是'Number'。 – Bart

4

的Util方法:

// Get time since the epoch and time since the VM was started 
private static const dateTime:Number = new Date().time; 
private static const dateTimestamp:uint = getTimer(); 
/** 
* Current time in ms 
*/ 
public static function getCurrentTime():Number 
{ 
    return dateTime + (getTimer() - dateTimestamp); 
} 
相關問題