gpt4 book ai didi

java - Java中的弹跳球

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:36:53 26 4
gpt4 key购买 nike

这可能是一个非常基本的问题,但我似乎找不到关于它的任何其他文章。

无论如何,我已经用 Java 编写了一个弹跳球小程序来尝试扩展我的基本技能。该程序只是一个简单的弹跳球,它会掉落并希望弹跳一段时间。原来的程序运行良好,但现在我试图将重力添加到程序中。重力实际上可以正常工作一段时间,但是一旦反弹变得非常小,动画就会在很短的时间内变得不稳定,然后球的位置就会不断下降。我试图找出问题所在,但我就是看不到它。我们非常欢迎任何帮助。

public final class Ball extends Rectangle {
float xspeed = 1.0f; float yspeed = 1.0f; float gravity = 0.4f;


public Ball(float x, float y, float width, float height) {
super(x, y, width, height);
}

public void update(){
yspeed += gravity;

move(xspeed, yspeed);

if(getX() < 0){
xspeed = 1;
}
if(getX() + getWidth() > 320){
xspeed = -1;
}
if(getY() < 0){
yspeed = 1;
}
if(getY() + getHeight() > 200 && yspeed > 0){
yspeed *= -0.98f;
}
if(getY() + getHeight() > 200 && yspeed < 0){
yspeed *= 0.98f;
}

}

public void move(float x, float y){
this.setX(getX()+x);
this.setY(getY()+y);
}

编辑:谢谢,这似乎已经解决了不稳定的运动。当球停止弹跳时,我仍在努力寻找如何阻止球向下移动。现在它将停止弹跳然后继续向下移动通过“地板”。我认为这与我的 yspeed += 重力线有关。我只是看不出如何停止运动。

最佳答案

当你这样做的时候

yspeed += gravity;

假设球的空间移动距离为 dx = v_i * t + 1/2 (-g) t^2。当你非常靠近地板时,这可能不是真的。如果出现以下情况,则失败:

  • 你离地板足够近并向下移动
  • 你离地面很近并且速度很慢(比如当球失去大部分能量时)

此错误会导致您的模拟停止保存能量,从而导致您在低振幅下看到不稳定的行为。

您可以通过使用更小的时间步来减少问题,如果您进行测试计算以注意到您何时离开房间并为选择一个安全的时间步 迭代(即,除非出现问题,否则始终使用默认设置,然后计算最佳时间步长)。

但是,您在此处使用的基本近似值还有其他问题。在任何数值分析文本中查找对数值求解微分方程的讨论。

关于java - Java中的弹跳球,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/609002/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com