我現在看到。您沒有打開VSync。
注意:VSync將幀頻限制爲顯示器刷新率(通常爲60fps)。
Ohh和最大/最小更新間隔在毫秒。
所以下面的示例使遊戲非常laggy:
app.setVSync(true); // Turn VSync
app.setMaximumLogicUpdateInterval(200); // Max. 200 miliseconds can pass
app.setMinimumLogicUpdateInterval(100); // Min. 100 miliseconds must pass
所以我認爲你必須圍繞數字播放,使其優化。
但是,這是不是你所需要的:d
我看到這一點:
player_X = player_X + velocityX;
player_Y = player_Y + velocityY;
因此,這是你的代碼,更新播放器的位置。 您必須使用增量編號。
public void update(GameContainer gc, int delta)
正如你所看到的delta是一個預定義的整數。增量包含兩次更新之間傳遞的時間。所以在這之後,你應該把所有東西都與delta相乘。
檢查:
player_X += velocityX * delta;
player_Y += velocityY * delta;
// The '+=' means player_X = player_X + something (if you did not know)
注:
player_X += velocityX * delta * 1.5f;
player_Y += velocityY * delta * 1.5f;
例子:如果玩家在變更後移動緩慢,然後只需用一些像這樣乘以:
The Runnable Jar
MainComponent.java
GameState.java
這是給你一個自制的快速和簡單的例子。嘗試一下,品嚐源代碼:D
哦,這個距離計算方法會讓玩家搖搖欲墜。
很酷,它確實擺脫了緩慢的運動,但它會擾亂運動代碼,類似於您的問題,它不會移動到適當的位置。 – 2013-04-11 16:31:58
我給你加了一個例子 – HUNeater 2013-04-11 17:36:47
Yay!最後在使用你在示例中提供的代碼之後得到了它,並且我固定了該單元幾乎沒有錯過它的目標。 – 2013-04-11 19:25:30