在我的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;
}
我在每一帧的开头都调用这个方法。 然后我使用增量值来计算运动和事物。
这是一种正确的方法吗?或者我错过了计算顺序的东西?因为我觉得运行应用程序有点滞后......所以它不能完全正确,可以吗?
答案 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();
}