2013-04-09 119 views
0

雖然在我的遊戲中看起來很有趣,但我有一些基本的rts移動,您可以右鍵單擊並移動到那裏。但有時當我運行遊戲時,單元移動速度比正常慢得多,但代碼中沒有任何變化(其他時間單元移動速度更快)。當我打開更多的程序,速度恢復正常,但如果我只是運行Netbeans,我會得到超級慢速運動。在slick2d中設置增量的最大值和最小值

我有一種感覺,它與delta值(不太確定)有什麼關係,但是因爲我是slick2d的新手,我不知道從哪裏開始解決這個問題。

所以我的問題是,我可以限制增量值,所以它不能更新太慢或太快,是增量甚至我的問題?

http://pastebin.com/fRndGE2p //主類

http://pastebin.com/KJ8W3134 // PlayerStats

回答

1

我現在看到。您沒有打開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
哦,這個距離計算方法會讓玩家搖搖欲墜。

+0

很酷,它確實擺脫了緩慢的運動,但它會擾亂運動代碼,類似於您的問題,它不會移動到適當的位置。 – 2013-04-11 16:31:58

+0

我給你加了一個例子 – HUNeater 2013-04-11 17:36:47

+0

Yay!最後在使用你在示例中提供的代碼之後得到了它,並且我固定了該單元幾乎沒有錯過它的目標。 – 2013-04-11 19:25:30

相關問題