游戏循环 - 时间计算

时间:2014-12-15 11:40:35

标签: java opengl lwjgl game-engine game-loop

在我的Opengl"引擎"我有以下方法来计算所有时间值,我可能需要在一个框架中:

public static void computeTime(){
    thisFrame = System.nanoTime();
    delta = thisFrame - lastFrame;
    lastFrame = thisFrame;
    deltams = (float) (delta / 1e6);
    deltas = (float) (delta / 1e9);
    fps = (float) 1e9 / delta;
    ticksInSeconds += deltas;
}

我在每一帧的开头都调用这个方法。 然后我使用增量值来计算运动和事物。

这是一种正确的方法吗?或者我错过了计算顺序的东西?因为我觉得运行应用程序有点滞后......所以它不能完全正确,可以吗?

1 个答案:

答案 0 :(得分:1)

修改

很明显,计时器并不总是像你期望的那样工作。请查看本主题中提供的其他答案。

原始答案

就个人而言,我会根据自最后一帧以来经过多少时间,逐帧使用固定移动而不是可变移动。

要实现这一点,您需要一个像update()这样的方法来更新所有位置并绘制更新后的视图,然后使用计时器定期调用此方法:

Timer timer;
final int FPS = ... //Number of frames per second
final int MS_BETWEEN_UPDATES = 1000/FPS;

ActionListener updater = new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
        update();
    }
};

void update() {
    //Update your game here
}

void startGame() {
    timer = new Timer(MS_BETWEEN_UPDATES, updater);
    timer.start();
}