我有一个基于System.nanoTime()
的计时器
我想放慢速度。
我有这个:
elapsed = System.nanoTime();
seconds = ((elapsed - now) / 1.0E9F);
其中now
是System.nanoTime();
之前在班级中调用过的。{/ p>
为了减慢速度,我尝试了:
if(slow){
elapsed = System.nanoTime();
seconds = ((elapsed - now) / 1.0E9F) * 0.5F;
}else{//The first code block
但后来我遇到了seconds
被切成两半的问题,这是不可取的。
在slow
为真之前,它显示10秒到屏幕,当slow
为真时,它显示5秒,这是不可取的。
我想减慢计时器的速度,不要将它减半并减慢速度
另一方面,它减慢了时间,这就是我想要的。
如何在不缩短现有时间的情况下减慢时间?
答案 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
}