【发布时间】:2013-09-24 19:11:08
【问题描述】:
我的程序中有以下方法可以让球不断弹跳。我尝试过修改,但似乎无法让球停在我的 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
}
}
【问题讨论】:
-
那么当球落到底部时会发生什么?
-
每当我点击 GUI 时,球会向上移动到窗口顶部,然后向下弹跳,然后再次向上弹跳。每次从墙上反弹都会加快或减慢速度。
-
@NPE 这是代码行
if (y <- 0)检测底部并改变方向标志upDown。 -
@LeeMeador 我更新了。也许你可以看看,让我知道你的想法
-
两件事:1)
if (y > top) y = top - (y - top)和if (y < bottom) y = bottom + (bottom - y)将阻止球从顶部和底部传出。请记住设置顶部和底部,这样球的完整图像就不会超出图形区域。 (如果球是在 height=y 处绘制的半径为 5 的圆......将底部设置为 5,以便整个圆始终显示。出于同样的原因,将顶部设置为 maxY - 5。)
标签: java math user-interface methods gravity