-1

に基づいたタイマーがあり、System.nanoTime() それを遅くしたいと考えています。

私はこれを持っています:

elapsed = System.nanoTime();
seconds = ((elapsed -  now) / 1.0E9F);

wherenowSystem.nanoTime();クラスの早い段階で呼び出されます。

それを遅くするために、私は試しました:

if(slow){
    elapsed = System.nanoTime();
    seconds = ((elapsed -  now) / 1.0E9F) * 0.5F;
}else{//The first code block

しかし、その後seconds、半分にカットされるという問題に遭遇します。これは望ましくありません。beforeslowが true の場合は画面に 10 秒表示され、slow true の場合は 5 秒表示されますが、これは望ましくありません。

タイマーを半分にカットするのではなく、遅くしたい

一方で、それは私が望むものである時間を遅くします。

現在の時間を半分に減らさずに、どうすれば時間を遅くできますか?

4

2 に答える 2

2

ループのたびに最初から再計算するのではなく、秒数を追加します。

elapsed = System.nanoTime();
if (slow) {
    seconds += ((elapsed -  now) / 1.0E9F) * .5F;
}
else {
    seconds += ((elapsed -  now) / 1.0E9F);
}
now = elapsed;  // so next time you just get the incremental difference
于 2011-07-27T06:26:24.760 に答える
0

実行する必要がある乗算を含むメンバー変数を持つことができます。常に正しい秒数を計算し、タイマーを使用するときはそれを掛けます。

float multiple = 1.f;
//...
seconds = (elapsed -  now) / 1.0E9F;
//...
// setting timer:
somefunc(seconds * multiple);

public void setSlow(boolean slow) {
    if(slow)
        multiple = 1.0f;
    else
        multiple = 0.5f
}
于 2011-07-27T06:00:08.200 に答える