我正在開發一個2d遊戲來幫助自學java 2d遊戲開發,並且遇到了一個我無法解決的問題。逐漸減慢球的運動
我有一個球在屏幕上移動。如果我按下右箭頭鍵,它會將球向右移動1個像素,如果我按住右箭頭鍵則會增加球的移動速度。
我的問題是,我想讓球在我釋放按鈕後逐漸減慢,我找不到一種方法來做到這一點。所有我能想到的是慢慢地降低速度,並使用「thread.sleep()」來阻止它立即達到0,但顯然這只是停止整個動畫,它看起來很糟糕。
我還有其他選擇嗎(我想我需要在這裏使用計時器)?
-Panda
我正在開發一個2d遊戲來幫助自學java 2d遊戲開發,並且遇到了一個我無法解決的問題。逐漸減慢球的運動
我有一個球在屏幕上移動。如果我按下右箭頭鍵,它會將球向右移動1個像素,如果我按住右箭頭鍵則會增加球的移動速度。
我的問題是,我想讓球在我釋放按鈕後逐漸減慢,我找不到一種方法來做到這一點。所有我能想到的是慢慢地降低速度,並使用「thread.sleep()」來阻止它立即達到0,但顯然這只是停止整個動畫,它看起來很糟糕。
我還有其他選擇嗎(我想我需要在這裏使用計時器)?
-Panda
您需要告訴我們您正在使用的GUI庫。假設鞦韆:
嘗試建立這樣的:
boolean isAccelerating = false;
而且在你按下鍵設置的值更改爲true
當你按下右箭頭。當您釋放右箭頭鍵時將其更改回false
。
當你不斷更新球的位置,如果isAccelerating
是假的(即你放開右箭頭),然後做一個locationX -= 1
你也想添加一個if語句,以防止它跑出屏幕:
if(locationX < = 0){
ball.setLocation(0,x) // or wherever you want it to stop.
沒有代碼很難更具體。
就足以讓你開始...
你需要追蹤加速度和位置(每個載體),然後應用d = 1/2原子^ 2 + VIT(谷歌公式)來你在每個計時器上的位置tick,其中t是現在和最後一個計時器tick之間的時間差。
當速度改變方向,設置爲0。
如果要逐漸減速,做到這一點的最簡單的方法就是用一個小數乘以你的速度,即速度* = 0.5。
這會使您的當前速度每循環減半,這意味着每次減少會逐漸減少,從而使您平穩停止。
你能發佈你的代碼嗎? – leigero
試着看看[這個例子](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