我之前问过一个问题,为什么我的球员的动作看起来不顺畅,我被建议这样做。变步时间,我误解了吗?
如果你想要(或需要)来降低CPU使用率,您可以保留的,因为前一帧经过时间的计数,并且如果它没有时间来运行的框架,睡一毫秒,否则运行帧。
但是,这样做后,我的玩家应该尽可能快地(粗略估计)移动3-4倍。然而,我感到困惑的是,我的运动是基于delta时间,积累到每秒1000-1005毫秒。我认为具有可变的时间步长意味着游戏更新应该以相同的速度进行,无论帧速如何。我错了吗,还是我做错了什么?
主回路
private static final int UPDATE_RATE = 60;
private static final float UPDATE_PERIOD = 1000F/UPDATE_RATE;
private void mainLoop() {
long beginTime, timeTaken;
float timeLeft;
while (state == State.PLAYING) {
beginTime = System.nanoTime();
update();
repaint();
timeTaken = System.nanoTime() - beginTime;
timeLeft = (timeTaken/16000F);
if (timeLeft < UPDATE_PERIOD) {
try {
Thread.sleep(1);
} catch (InterruptedException ex) { }
}
}
}
private void update() {
p.move(deltaTime);
}
运动算法:
public void move(float deltaTime) {
if(left && !right)
xPos -= 250*(deltaTime/1000);
if(right && !left)
xPos += 250*(deltaTime/1000);
}
三角洲时间计算(每次重绘叫):
long currentTime = System.nanoTime();
deltaTime = (currentTime - previousTick)/1000000F;
previousTick = currentTime;
这就是我之前所做的,但我被告知这是不准确的,我应该这样做。 – Troubleshoot
那么你可以使用Timer类,它比线程更好 –