2017-06-16 21 views
2

我寫了一個計時器,以顯示給用戶多少,他/她是在當前的一幕:問題與使用定時器

timer_txt.x = 352; 
timer_txt.y = 705; 
var nCount: Number = 0; 
var myTimer: Timer = new Timer(50, nCount); 

timer_txt.text = "Time: " + nCount.toString(); 
myTimer.start(); 

function countUp(e: TimerEvent): void { 
    nCount++; 
    timer_txt.text = "Time: " + nCount.toString(); 
    if (nCount > 60) { 
     var formattedTime = 
     ((Math.floor(nCount/60)) + ":" + (nCount % 60 >= 10 ? "" : "0") + (nCount % 60)); 
     timer_txt.text = "Time: " + formattedTime.toString(); 
    } 
} 

我有一個reset按鈕復位在現場,但沒有其他對象timer

我的問題是:

  1. 每當我點擊reset按鈕時,timer是越來越慢,我不知道爲什麼,而我不會使在計時器的任何變化。 我有很多flags和許多child在舞臺上。當用戶點擊/觸摸reset按鈕時,所有flags將等於0,並且所有child將再次到達removedadd

  2. 當用戶去其他場景(計時器應該停止工作,而計時器的當前值需要保存在一個變量中),並且當用戶再次回到這個場景時,這個計時器應該工作如下: previous value + counting the time

  3. 當我在手機上打開它時,它的速度與PC不同。有沒有任何解決方案將其編碼爲與本地設備的時間兼容? 這是我寫了一個函數:

    function timerAtoB(firstColor: int): void { 
        lineColor = firstColor; 
        //GRID; 
        //Path A to B 
        var PathAB: Grid; 
        PathAB = new Grid(4, 35, 20, 22, canvas, lineColor); 
        this.addChild(PathAB); 
    } 
    

此功能是一個維連接到B的尺寸。 A和B之間的連接將使用一個名爲Grid的類來構造 - 該類將找到A和B之間的最短路徑,並在它們之間建立連接(我不想通過它比它更多地訪問它)更復雜)。

,我調用這個函數有一些延遲:

delayCallFunctions(1000, timerAtoB, wireColor); 

當我在我的手機上運行它,這種延遲會正常,但不能在正確的時間工作。例如,我寫了1000ms表示在執行約1 sec之後執行該功能,但在我的手機上執行該功能需要多於1 sec

在此先感謝您的時間和幫助。

+0

對於第二個問題打勾,我已經使用一類變量。每當用戶離開場景時,當前值將發送給班級,當用戶回到同一場景時,班級將把變量傳遞給場景。但顯然它工作不正常! – mazName

+0

您的計時器上沒有聽衆 – BadFeelingAboutThis

回答

3

您的問題很可能是您每次重新訪問包含此代碼的框架時,都會創建另一個計時器實例。

var nCount: Number = 0; 
var myTimer: Timer = new Timer(50, nCount); 

該代碼會將您的nCount重置爲0,並在您每次訪問該框架時創建一個新的計時器。

最有可能的,你想要做的是:

//just declare the vars 
var nCount:Number; 
var myTimer:Timer; 

//assign them a value only if they are empty 
if(nCount === NaN) nCount = 0; 
if(!myTimer) myTimer = new Timer(50, 0); 

你也想做myTimer.stop();當您離開現場。

桌面/手機之間的速度差異可能與性能有關,因爲50毫秒的延遲並不是很多時間做任何計算複雜的事情,移動設備可能無法跟上,因此速度會變慢。考慮延長到100毫秒甚至250毫秒,看看是否有幫助。此外,擺脫formattedTime變種,因爲它不需要,並會沒有它的計時器會更好地執行。

有一個小竅門,你實際上並不需要的nCount VAR,作爲定時器本身具有currentCount財產跟蹤它多少次自上次timer.reset()

+0

感謝您的提示和很好的答案。第二個問題已經解決,但即使我給定時器分配'1000ms',第一個和第三個問題仍然存在。 – mazName

+0

如果您想在問題中處理項目1的幫助,請編輯您的問題以包含相關代碼(無論您的重置按鈕觸發的代碼如何)。對於#3,或許可以解釋一下更多關於正在發生的事情以及如何確定速度差異? – BadFeelingAboutThis

+0

我編輯了這個問題,並提供了更多關於我的問題的信息。請讓我知道,如果有任何進一步的信息需要。 – mazName