我有这个游戏循环:

public void show() {

        // other stuff...

        // set delta time
        float currentTime = clock.getElapsedTime().asSeconds();
        float dt = currentTime - lastTime;

        // iterate through entities
        for (Entity e : entities) {
            e.draw();
            e.update(dt);
        }

        // other stuff...

        lastTime = currentTime;
    }


如何为更新过程实施固定的时间步?也就是说,如何基于恒定的fps更新过程(不是每次循环运行时都更新?),我知道我只会对实体进行两次迭代(一次用于更新,一次用于绘制),但是如何解决更新过程的时间步长?

最佳答案

如果可以,我建议您使用多个线程:

您需要一个单独的类,其中包含一个时钟,可以在其上调用帧更新。出于结构目的,您可能希望此类创建窗口类的实例。

public void run(){
    for(;;){
        Thread.sleep([milleseconds between frames]);
        [graphic class].nextFrame();
    }
}


如果需要,这里有一个关于线程的教程:https://docs.oracle.com/javase/tutorial/essential/concurrency/runthread.html

10-08 18:34