【问题标题】:Programming Gravity编程重力
【发布时间】:2013-02-12 16:07:56
【问题描述】:

我正在编写游戏 (JAVA),我想在其中添加一些重力。我试图找到一个公式或类似的东西,但有很多不同的方法可以做到这一点。我正在寻找一个可以模拟真实重力并在物体接触地板时产生一些反弹的公式。对不起我的英语不好。

【问题讨论】:

  • 这不是问题,去google“游戏物理Java示例代码”
  • 反弹是通过碰撞检测完成的。重力与它无关 - 只是修改物体的速度。
  • y(t)=-4.9*t^2 + v_y_0*t + y_0

标签: java simulation game-physics gravity 2d-games


【解决方案1】:

在地球表面附近,所有落体的重力加速度是恒定的(忽略空气阻力)。在给定初始位置x0、初始(垂直)速度v0 和时间t 的情况下,公式xf = x0 + v0*t + (1/2)*g*t^2 将为您提供最终位置tg 是一个常数,在技术上有点取决于您的海拔和其他因素,但在 9.81 m/s 附近。

要进行反弹,您首先需要进行一些碰撞检测。当您检测到碰撞时,您需要计算垂直于表面的矢量(如果您的表面是水平面则很容易),然后“反映”(某种程度)您的速度矢量通过该矢量(如果法线向量直接指向上方,即,您从平坦表面反弹,这相当于反转速度v)。请注意,为了实现这一点,您可能应该在反弹后应用一些阻尼:除了反映速度矢量外,您还需要缩小它(取决于它在反弹后的反射方式,这可能涉及减少一个或两个组件)。

要实际模拟这样的场景,您可以使用多种技术:或者预先计算点列表,然后通过它们运行动画,或者您可以使用 Euler 模拟所有这些方法或其他一些数值求积技术(梯形规则、龙格库塔等)。

【讨论】:

  • thx,重力正在起作用,但如果想让精灵反弹,你说我只需要反转速度,但如果我打印公式:
  • 200.99 = 0 + (15 * 13.399)1/2 * 9.81 * (13.399 * 13.399) //位置 Y : 199 // 202.499 = 0 + (15 * 13.499)1/2 * 9.81 * (13.499 * 13.499)//位置 Y : 200 // -203.99 = 0 + (-15 * 13.599)1/2 * 9.81 * (13.599 * 13.599)//位置 Y : 202 // -205.499 = 0 + ( -15 * 13.699)1/2 * 9.81 * (13.699 * 13.699)//位置Y:-203//
  • 嗨,我解决了我的问题,我将我的位置设置在 xf 并且我应该做 myPosition.y += xf;
猜你喜欢
  • 1970-01-01
  • 2012-05-08
  • 1970-01-01
  • 2023-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多