基于System.nanoTime()减慢时钟;

时间:2011-07-27 05:51:24

标签: java clock nanotime

我有一个基于System.nanoTime()的计时器 我想放慢速度。

我有这个:

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

其中nowSystem.nanoTime();之前在班级中调用过的。{/ p>

为了减慢速度,我尝试了:

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

但后来我遇到了seconds被切成两半的问题,这是不可取的。 在slow为真之前,它显示10秒到屏幕,当slow 为真时,它显示5秒,这是不可取的。

我想减慢计时器的速度,不要将它减半并减慢速度

另一方面,它减慢了时间,这就是我想要的。

如何在不缩短现有时间的情况下减慢时间?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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
}