如何在Libgdx中每秒增加时间

时间:2014-04-14 14:26:48

标签: java android libgdx

我尝试为我的游戏增加时间,每秒都会增加。 如何解决?

我在下面添加我的代码

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类,但它产生了类似的结果。

先谢谢。

3 个答案:

答案 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,以便缩小小数位。

希望它有所帮助。

编辑:如果您需要timertime变量,则需要将它们存储在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.