2015-12-12 22 views
0

我正在嘗試動畫一個簡單的Java遊戲,其中包括一個球的運動。我目前對球的計算是:當前的X位置+ X方向*球速度,對於Y也是一樣。爲了確保球始終以相同的速度移動,我希望包含增量時間。目前,我有:如何在Java遊戲中使用增量時間?

long time = System.currentTimeMillis(); 

然後在遊戲圈我有

long currentTime = System.currentTimeMillis(); 
int changeInTime = int(time-currentTime); 
time = currentTime; 

我想用增量時間,以確保球在X移動1個像素,Y方向每隔30毫秒。計算changeInTime/40的移動速度比我能看到的要快,然後它會卡在角落裏。有任何想法嗎?

+1

有一個整個遊戲開發StackExchange網站。 http://gamedev.stackexchange.com/questions/13008/how-to-get-and-use-delta-time – WalterM

+1

是不是你的'changeInTime'消極?不應該是'int changeInTime =(int)(currentTime-time)',也可以使用'System.nanoTime()',否則當操作系統時鐘改變時你會有一些有趣的毛刺。 – user3707125

回答

0

對於delta時間的工作,你必須在循環中設置兩個變量,否則time - currentTime只是不斷增加,因爲這將是自程序開始執行以來的時間。

例子:

long lastTime = System.currentTimeMillis(), time; 

while (isRunning) { 
    time = System.currentTimeMillis(); // set time 
    // Do stuff 
    lastTime = time; // set last time 
} 
+0

你看過這個問題嗎?作者已經這樣做了:'time = currentTime;' – user3707125

0

如果你打算做一個遊戲,這可能是一個好主意,使用一個線程,以動畫球,如果你這樣做,你可以延遲球睡眠()'方法。

+0

你是如何得出結論的:沒有渲染線程,並且在畫框之後它沒有睡覺?線程睡眠的事實並不否認計算所用時間的必要性。 – user3707125

+0

我確實使用了一個線來動畫球,但是我沒有德爾塔時間的問題是球似乎突然變慢,然後加速。 – user3866812