Java 弹跳球游戏 - 滚球场景

标签 java 2d physics

我正在用 Java 为 Android 手机编写一个弹跳球游戏。除了碰撞和恢复系数的小问题之外,一切似乎都工作正常。

当球与表面碰撞时,会计算该表面的法线 vector (nx 和 ny),并且球的 vector 方向(dx 和 dy)反射(reflect)在该法线 vector 中。

目前我使用 0.9 作为恢复系数,并将 dx 和 dy 乘以该值,这显然过于简单化,因为它不能正确模拟滚动。

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

很抱歉没有发布我的任何代码,我离开了我的计算机,因此如果这有助于任何人理解,可以稍后发布。

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

最佳答案

恢复系数与碰撞物体的相对弹性有关。这是解释球和表面在撞击时都会变形这一事实的简单方法。一些变形能量会损失掉(例如产生的热量、声波等),但大部分会返回到“推”另一个物体。

如果恢复系数等于 1.0,则不会损失任何能量。将其视为“捏造因素”,这样您就不必解决动态弹性问题。

滚动是另一回事。

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

除了 x、y 方向的位移之外,您还需要另一个方程。您将需要另一个用于围绕球质心的 z 轴的扭矩。

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

关于Java 弹跳球游戏 - 滚球场景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4898409/

相关文章:

java - Swing 图形用户界面 : Scrolling not updated when a JTable gets bigger

c++ - 使用龙格库塔的 2D 刚体物理

c++ - 计算二维惯性张量

c++ - 为物理引擎写入 'ON' 事件

java - 如何使用 Java EE 7 WebSockets 实现推送到客户端?

java - Play Framework 2.8.x MySQL 连接问题

java - Libgdx:暂停菜单和暂停状态

java - 在数组中查找最近的坐标?

android - 回合制游戏,哪种抽奖方式好?

python - 从 Game Maker 到 Python