2014-02-13 157 views
1

我想弄清楚如何每秒計數10次並顯示它。周計數1/10秒

我有一個叫做countpoints的int,這是用戶用點開始的。可以說800.

我想每秒下降10點,但顯示每個點下降,而不是像我的腳本下面的每10點。

這裏是我迄今所做的:

if(miliseconds <= 0){ 

    if(seconds <= 0){ 
     minutes--; 
     seconds = 59; 
    } 
    else if(seconds >= 0){ 
     seconds--; 
     countpoints = countpoints-10; 

    } 

    miliseconds = 100; 

} 

miliseconds -= Time.deltaTime * 100; 

這個運行在無效更新和這裏由10每秒countpoints瀑布。但我希望能夠像秒錶秒錶一樣顯示數字。我怎麼做?

任何幫助表示讚賞,並在此先感謝:-)

+0

會有更多的幫助,如果u可以只顯示更新參數,有一些統一的計時器對象? –

回答

0

您應該使用協程爲計算,而不是在更新()。協程可以非常簡單。你只需要開始croutine,然後等待0.1秒,並減少對應點1.再次調用那個協程來保持它運行。只要你想繼續調用它就添加條件。

private int countpoints=800; 
private float t=0.1f; 
private int noOfSeconds=90; 
private int min; 
private int sec; 
private int temp=0; 

void Start() 
{ 
    StartCoroutine(StartTimer()); 
} 

IEnumerator StartTimer() 
{ 
    yield return new WaitForSeconds(t); 
    countpoints--; 
    temp++; 
    if(temp==10) 
    { 
     temp=0; 
     noOfSeconds--; 
    } 
    min = noOfSeconds/60; 
    sec = noOfSeconds%60; 

    if(noOfSeconds>0) 
    { 
     StartCoroutine(StartTimer()); 
    } 
} 

void OnGUI() 
{ 
    GUI.Label(new Rect(100f,100f,100f,50f),countpoints.ToString()); 
    GUI.Label(new Rect(100f,160f,100f,50f),"Time : "+min.ToString("00")+":"+sec.ToString("00")); 
} 
0

你可以做它的更新方法和每100ms遞減點一次,你需要照顧下來的不是四捨五入東西或錯誤將是系統性的,你會得到波濤洶涌的結果。

使用協程將無法按預期工作,因爲時間間隔不能保證。

private float _milliseconds = 0; 
private int points = 800; 

void Update() 
{ 
    _milliseconds += Time.delta * 1000; 

    if(_milliseconds > 100) 
    { 
    points--; 
    //add updating GUI code here for points 
    _milliseconds -= 100; 
    } 
} 

你不會得到波濤洶涌遞減爲_milliseconds由100減少,所以即使有從長遠來看,在幀的時間差異,你會得到妥善處理。與腳本

的一個問題是,如果幀採取了很多100ms以上consistenly,但如果需要那麼久你可能有更大的問題:d