Замедлить часы на основе System.nanoTime (); - PullRequest
0 голосов
/ 27 июля 2011

У меня есть таймер на основе System.nanoTime() и я хочу замедлить его.

У меня есть это:

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

, где now - это System.nanoTime();, вызываемый ранее в классе.

Чтобы замедлить его, я попытался:

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

Но затем я сталкиваюсь с проблемой разрезания пополам seconds, что нежелательно. Прежде чем значение slow будет равно true, на экране будет отображаться 10 секунд, а когда значение slow равно true, отобразится 5 секунд, что нежелательно.

Я хочу замедлить таймер, не разрезать его пополам, а замедлить

С другой стороны, это замедляет время, чего я и хочу.

Как бы я замедлил время, не сократив время наполовину?

Ответы [ 2 ]

2 голосов
/ 27 июля 2011

Добавлять в секунды, а не пересчитывать его с нуля каждый раз через цикл:

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
0 голосов
/ 27 июля 2011

Вы можете иметь переменную-член, которая содержит умножение, необходимое для выполнения.Всегда рассчитывайте правильное количество секунд, а когда вы используете таймер, умножьте его:

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
}
...