我的程序中有以下方法可以保持球不断弹跳。我尝试过修改,但似乎无法让球停在 GUI 的底部。我的主要目标是让这些方法模拟您弹起真实球的情况。
private void updateDelta() {
final int minimumMovement = 5;
final int maxExtra = 10;
deltaY = minimumMovement + (int) (Math.random() * maxExtra);
}
public void verticalBounce(Container container) {
// controls vertical ball motion
if (upDown) {
y += deltaY;
if (y >= getHeight()) {
upDown = false;
updateDelta();
}
} else {
y += -deltaY;
if (y <= 0) {
upDown = true;
updateDelta();
}
}
}
更新:
球弹起并停在 GUI 的底部。
public void verticalBounce(Container container) {
deltaY = deltaY - gravity;
y = y + deltaY;
if (y > getHeight()) {
y = getHeight(); // reset location
deltaY = (int) (deltaY * -0.9); // slows down ball
}
}
最佳答案
这些代码看起来都不正确。您需要实现直线运动方程:
http://en.wikipedia.org/wiki/Linear_motion
您需要的是s = ut + 0.5 * a * t * t
,其中
s = distance
u = an initial velocity - regard as the speed at which it hits the ground
a = acceleration due to gravity (you can probably have this pretty arbitrary)
t = time
在向上的过程中,您反转了a
的符号。
要模拟有损弹跳,请通过从系统中取出一定的能量 E 来减少 u
:
new_u * new_u = (1 - E)u * u
。
(这来自运动物体的动能公式)。
从你的问题中我可以看出你有能力实现这个,所以我不会提供代码;只是物理原理。
关于java - 让球停下来,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18990033/