2016-04-11 5 views
0

ゲームにゲームを完了するために必要な時間を記録するモードをゲームに追加したいとします。複数の変数とwhileループでの再生時間の追跡

私の現在のソリューションはこれです:私は私のゲームを更新するたびに

int timerMilliseconds_= 0; 
int timerSeconds_ = 0; 
int timerMinutes_ = 0; 
int timerHours_ = 0; 

が、私は現在のデルタ時間でtimerMilliseconds_を増やし、更新:私は、時間の経過を追う(様々な理由のために)4つの変数を持っています値。これは次のようになります。

timerMilliseconds_ += dt.asMilliseconds(); 

if (timerMilliseconds_ >= 1000) { 

    while (timerMilliseconds_ >= 1000) { 
    timerMilliseconds_ -= 1000; 
    timerSeconds_++; 
    } 

    while (timerSeconds_ >= 60) { 
    timerSeconds_ -= 60; 
    timerMinutes_++; 
    } 

    while (timerMinutes_ >= 60) { 
    timerMinutes_ -= 60; 
    timerHours_++; 
    } 

} 

このコードは動作しているようですが、奇妙な...私に。

これらのループは意味がありますか?私はこれを強化していますか?

私はこれがほぼcodereview価値があることを知っていますが、私はここでより良い答えを得ることができると思った!ありがとうございました!

+2


だから、算術演算を使用することができます。私はむしろunsigned intの周りに小さなラッパーを1分のメンバーと時間の変換関数で1分/秒/時間で作成します:)あなたがすべてのフレームで4つの変数すべてを使用していない限り、 – BlackCat

+1

あなたがいる場合でもBlackCatのコメントに追加するすべてのフレームで4つの時間単位を使用すると、各単位のカウントと変わらず、整数除算とモジュロ単位で変換できます。 – Jerry

答えて

4

繰り返しサブトラクションのカウントは、(整数)除算と等価です。残りは残っているものです。プレイ時間を追跡するための4つの別々の変数を維持するためにそれは私にはかなり奇妙なよう

timerSeconds = timerMilliseconds/1000; 
timerMilliseconds = timerMilliseconds % 1000; 
timerMinutes = timerSeconds/60; 
timerSeconds = timerSeconds % 60; 
timerHours = timerMinutes/60; 
timerMinutes = timerMinutes % 60; 
関連する問題