我之前問過一個問題,爲什麼我的球員的動作看起來不順暢,我被建議這樣做。變步時間,我誤解了嗎?
如果你想要(或需要)來降低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類,它比線程更好 –