java - 让球停下来

标签 java math user-interface methods gravity

我的程序中有以下方法可以保持球不断弹跳。我尝试过修改,但似乎无法让球停在 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/

相关文章:

java - JLabel位置-JAVA GUI

ios - 更新 UI Dispatch_Async 后台下载 Swift

c# - 未生成资源文件代码

java - 从 NetBeans 执行上下文获取资源有效,但从命令行执行 jar 时无效

java - 如何迭代 TreeMap 直到特定键?

java - 使用一个 POJO 类来处理不同的 xml 响应

c++ - 将 while 循环转换为数学公式

java - Selenium CSS 选择器语法用于检查类和文本

algorithm - 如何识别股价数据中的转折点

python - 使用 sympy 求解具有复系数的多项式