每个特定的ms调用一个方法

时间:2014-01-03 16:59:28

标签: java libgdx

我正在LibGDX中开发游戏,我想每隔ms调用一次更新功能。

但我不知道如何在我的情况下做到 -

while(gameLoop) {
  renderWorld();
}

public void renderWorld() {
  // Some rendering code here
  if(world.map[mapPos].ID == 9) {
    updateWater(mapPos); // This function makes the water animate, but i must put a time limit otherwise it will be too hard to see the animation, how can i limit this?
  }
}

正如你所看到我想要更新水,我不能没有时间限制这样做,因为否则水“动画”会太快甚至看不到。

2 个答案:

答案 0 :(得分:5)

在我看来,有更好的方法来解决这个问题。由于您总是按增量时间更新所有内容,因此您可以简单地总结时间。如果时间超过500毫秒,则更新它并将计时器重置为0.因为更新并不总是精确到500毫秒,但如果您的逻辑不在60帧之下,您就不会注意到它。

我不会使用线程或计时器。

这是一个古怪的例子:

@Override
public void act(float delta) {
    // sum the deltas
    sum += delta;
    // time to update?
    if (sum >= update_time){
       //update the map here and set the update_time to the 500ms for example
    }
}

这将是一种不使用Timer类并使用常规libgdx“系统”的计时器。在这种情况下,Map可以是一个Actor,你可以通过重写act方法来定期更新它,如上所示。 (来自libgdx的Stage-Actor-System框架的Sceen2D) 在public void render(float delta) {...}。{/ p>内部照常使用该法案

如果你想使用timer,请查看libgdx中的Timerclass。 Link to the Timer

答案 1 :(得分:1)

您可能还想查看com.badlogic.gdx.utils.Timer

你可以简单地使用,

float delay = 0.5f; // seconds

Timer.schedule(new Task(){
    @Override
    public void run() {
        // Do your work
        if(world.map[mapPos].ID == 9) {
            updateWater(mapPos);
        }
    }
}, delay, delay);

这将在主线程上以500毫秒的间隔重复执行 所以gwt版本也没有问题。

希望这有帮助。