移动障碍物的碰撞响应(2D)

时间:2014-05-26 10:27:02

标签: java android game-physics gravity

我开发的Android游戏有点类似于Star Control。

在这个游戏中,行星引力起着巨大的作用,因此玩家的船只受到各种行星的影响。在这个游戏中,有多个行星移动(轨道)。

目前我的主要问题是处理碰撞响应。当玩家击中一个星球时,我希望玩家能够进行一次小小的反弹#34; 我使用了这个:https://www.youtube.com/watch?v=ymgbDdO8hKI作为编程的源头,它对于不会移动的行星非常有用。

然而,当行星移动时,算法在行星离开玩家时效果很好,但如果玩家在行星的路径上(即行星向玩家移动),行星排序" v"吃掉"玩家。

我知道我需要以某种方式补偿地球的速度。我尝试了不同的变化,例如将行星的矢量添加到弹跳的整体结果矢量中,但似乎没有任何结果给出好的结果......当行星似乎总是吃掉玩家的时候行星向玩家移动。

如果你们希望我发布代码示例,请告诉我,尽管我正在寻找更多的"概念"解决方案,就像上面提供的视频一样。

提前致谢!

1 个答案:

答案 0 :(得分:1)

要直接应用该视频中的概念,您可以切换到行星在碰撞时不移动的参考框架。为此,只考虑经典物理,你只需要改变玩家的速度减去行星的速度(2D矢量减法)。然后在视频中应用公式,最后通过添加行星的速度(2D添加)切换回原始参考帧。

在与视频类似的符号中,v_before弹跳前玩家的速度,v_planet行星的速度,n行星表面的法线碰撞发生的地方和C恢复系数,

v_before_2 = v_before - v_planet                       // change of reference frame
v_after_2 = v_before_2 - (1 + C) * (v_before_2 . n) * n  // simple wall bouncing
v_after = v_after_2 + v_planet                         // change to original reference frame