【问题标题】:Collision response with moving obstacles (2D)与移动障碍物的碰撞响应 (2D)
【发布时间】:2014-05-26 10:27:02
【问题描述】:

我正在开发一款类似于 Star Control 的 Android 游戏。

在这个游戏中,行星引力扮演着非常重要的角色,因此玩家的船会受到各种行星的影响。在这个游戏中,有多个行星在移动(轨道)。

我目前的主要问题是处理碰撞响应。当玩家撞击行星时,我希望玩家有一个小的“反弹”。 我用这个:https://www.youtube.com/watch?v=ymgbDdO8hKI 作为编程的源,它对不移动的行星非常有用。

但是,当行星确实移动时,当行星远离玩家移动时,算法运行良好,但如果玩家在行星的路径上(即行星正朝着玩家移动),则行星排序' v “吃掉”玩家。

我知道我需要以某种方式补偿行星的速度。我尝试了不同的变化,例如将行星的向量添加到反弹的整体结果向量中,但似乎没有什么能给出好的结果......当行星向玩家移动时,行星似乎总是吞噬玩家。

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

提前致谢!

【问题讨论】:

    标签: java android game-physics gravity


    【解决方案1】:

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

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

    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
    

    【讨论】:

    • 只是想确定第二行应该是这样的:v_after_2 = v_before_2 - (1 + c) * (v_before_2 .n) * n
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-03
    • 1970-01-01
    • 1970-01-01
    • 2011-10-15
    • 2015-07-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多