-1

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

我有这个:

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

where在课堂上较早地now被调用。System.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 回答