我正在开发一个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