2011-02-04 89 views
1

我正在为Java手机编写弹跳球游戏。除了碰撞和恢复系数的小问题之外,一切似乎都很好。Java弹跳球游戏 - 滚球场景

当一个球碰到一个表面时,计算该表面的矢量法线(nx和ny),并且该球的矢量方向(dx和dy)反映在该法线矢量中。

此刻,我使用0.9作为恢复系数,因此将dx和dy乘以这个值显然太简单了,因为它没有正确地模拟滚动。

是否有一个简单的公式可以更准确地计算新的dx和dy,以便如果球在碰撞时几乎平行于斜坡行进,则会比垂直碰撞时的速度损失更少。

不会发布任何我的代码,我远离我的电脑,所以可以稍后发布,如果这有助于任何人的理解道歉。

感谢您提前提供任何帮助。

+1

我不确定这是最好的地方问这个。我相信有一些数学/物理堆栈交换。 – 2011-02-04 13:25:07

+0

可能是GameDev SE? – 2011-02-04 15:12:17

回答

2

恢复系数与碰撞物体的相对弹性有关。这是一种简单的方法来说明球和表面在撞击时都会变形。一些变形能量丢失了(例如,产生的热量,声波等),但其中大部分能量回到“推动”另一个身体。

如果恢复系数等于1.0,则没有能量损失。把它看作是一个“模糊因素”,所以你不必做动态弹性问题。

滚动是另一回事。

我认为恢复系数只能应用于速度的法向分量。如果你想更接近真实的物理,摩擦和滑动必须适用于切向分量。

您还需要另外一个方程,而不仅仅是x,y方向上的位移。您将需要另一个关于围绕球的质心的z轴的扭矩。

牛顿的运动方程会将x和y方向的力以及围绕z轴的力矩相加。

0

我可能是错的,但解决这个问题的方法是计算球的角度,意思是artan(dy/dx)。

有了这个角度参考你的原点,你可以乘以这个角度的余弦。如果它是完全平行的,速度将保持不变,如果是完全垂直的,速度将为零。

您必须对此进行解释以确保您希望球有最小和最大速度反弹。

希望它有帮助!