我尝试为我的游戏增加时间,每秒都会增加。 如何解决?
我在下面添加我的代码
float timer;
timer += delta;
if(timer<=delta+1000)//every one sec
{
time = time+1;
timePoint.setSentence(""+time/100);
timer = 0f;
}
作为您的注释,delta是Gdx.graphics.getDeltaTime()。 '时间'是字符串。 但看起来时间增量缓慢。意味着当时间已经运行大约1.5秒, '时间'仍然增加1。 我除以100,因为如果不是它会增加更快/秒,
我也使用libgdx中的TimeUtils类,但它产生了类似的结果。
先谢谢。
答案 0 :(得分:2)
这应该有效。请注意,time/100
导致0表示0-99,1表示100-199。这可能不是你想要的效果。
float timer;
timer += delta;
if (timer >= 1) {
time++;
timePoint.setSentence(""+time);
timer -= 1;
}
问题在于你将计时器设置回0.如果它是1.1f(例如,因为最后一个delta是0.1f),那么你基本上会失去100ms。不要将计时器重置为0f,而是将其减少1f。
答案 1 :(得分:1)
我会这样做:
float time = 0f;
在渲染中:
time += delta;
timePoint.setSentence(Integer.toString((int)time));
delta
以秒为单位给出经过的时间,因此30FPS为1/30秒。因此,您只需将其添加到time
即可。要打印差异(我猜setSentence
正在打印文本),您只需将其强制转换为int
,以便缩小小数位。
希望它有所帮助。
编辑:如果您需要timer
和time
变量,则需要将它们存储在2个不同的变量中。
为此,我会这样做:
float timer = 0f;
int time = 0;
在render
:
timer+=delta;
if (timer >= 1f) {
time++;
timePoint.setSentence(Integer.toString(time));
timer-=1f;
}
通过这样做,如果重置timer
,则不会丢失几毫秒。
这意味着,如果计时器在一个渲染循环中从0.99f变为1.05f并且您将timer
重置为0f,则会松开0.05秒。如果这种情况每秒发生一次,你每20秒就会松开一秒钟(如果我没有错误^^)
答案 2 :(得分:0)
与纯java一样:
Timer timer = new Timer();
timer.schedule(new incrementYourValue(), 0, 1000); //1000 is time in mili sec
//0 is the time waited before the beginning.