2014-02-26 42 views
0

我正在開發一個2d遊戲來幫助自學java 2d遊戲開發,並且遇到了一個我無法解決的問題。逐漸減慢球的運動

我有一個球在屏幕上移動。如果我按下右箭頭鍵,它會將球向右移動1個像素,如果我按住右箭頭鍵則會增加球的移動速度。

我的問題是,我想讓球在我釋放按鈕後逐漸減慢,我找不到一種方法來做到這一點。所有我能想到的是慢慢地降低速度,並使用「thread.sleep()」來阻止它立即達到0,但顯然這只是停止整個動畫,它看起來很糟糕。

我還有其他選擇嗎(我想我需要在這裏使用計時器)?

-Panda

+1

你能發佈你的代碼嗎? – leigero

+0

試着看看[這個例子](http://stackoverflow.com/questions/19626338/japplet-creates-a-ball-that-bounces-and-gets-progressively-less-high-in-java/19626396 #19626396)和[這個例子](http://stackoverflow.com/questions/15897947/problems-with-javas-paint-method-ridiculous-refresh-velocity/15900205#15900205)這兩個演示使用減少向量。特別是第二個...... – MadProgrammer

回答

0

您需要告訴我們您正在使用的GUI庫。假設鞦韆:

  • 如果需要,您可以更改計時器內部的延時。
  • 或者(我認爲這樣更好),您可以減少定時器內每個時間片移動的距離。
  • 如果你選擇上面的第二個建議,你可能會更好使用雙變量建模你的距離和速度,但只是在顯示時轉換爲整數。
  • 如果使用Swing,我已經使用Key Bindings來觸發移動,通過按鍵更改一個開始移動的布爾值,然後釋放鍵恢復布爾值。
  • 您可以使用第二個布爾值,一個在鍵釋放後立即激活的slowingDown布爾值,一旦移動停止,最終會變爲false。
0

嘗試建立這樣的:

boolean isAccelerating = false; 

而且在你按下鍵設置的值更改爲true當你按下右箭頭。當您釋放右箭頭鍵時將其更改回false

當你不斷更新球的位置,如果isAccelerating是假的(即你放開右箭頭),然後做一個locationX -= 1

你也想添加一個if語句,以防止它跑出屏幕:

if(locationX < = 0){ 
ball.setLocation(0,x) // or wherever you want it to stop. 

沒有代碼很難更具體。

0

就足以讓你開始...

你需要追蹤加速度和位置(每個載體),然後應用d = 1/2原子^ 2 + VIT(谷歌公式)來你在每個計時器上的位置tick,其中t是現在和最後一個計時器tick之間的時間差。

當速度改變方向,設置爲0。

0

如果要逐漸減速,做到這一點的最簡單的方法就是用一個小數乘以你的速度,即速度* = 0.5。

這會使您的當前速度每循環減半,這意味着每次減少會逐漸減少,從而使您平穩停止。