我有这个游戏循环:
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