【问题标题】:How to change x and y velocities in response to a wall bounce如何改变 x 和 y 速度以响应墙壁反弹
【发布时间】:2020-04-10 20:23:37
【问题描述】:

我在空闲时间使用名为construct 3 的sudo 编程语言软件“编写”简单的超休闲手机游戏,因为我仍在学习实际语言,还不能很好地使用它们来制作游戏。

基本上我正在编写自己的超级简单的弹跳球物理引擎。在我的这个小弹球游戏中,我随时最多有 3 个球。我给每个球一个 x 速度和 y 速度实例变量。

这是我的问题:当球以任何角度从表面反弹时,x 和 y 速度如何变化?我知道如果地板是平的并且它碰到它,x 保持不变并且 y 翻转它的极性。我知道撞墙会发生相反的情况。但我不知道如何计算除 4 个主轴之外的任何其他角度。我确定这是一个简单的三角函数。哦,将您的答案简化为您可以做出的最简单的 sudo-code 响应。

【问题讨论】:

    标签: trigonometry physics game-development


    【解决方案1】:

    对于一个对象与角度为alpha 的平面的任何碰撞,您的对象将以角度-alpha 反弹回来。另外,你有所谓的动量守恒,这意味着如果你的表面不移动也不吸收任何东西,你的物体的总速度也不会改变。

    话虽如此,“您需要做的所有事情”就是参数化您的表面与水平面的角度和您的对象进入您的表面的角度,这样您就可以轻松地注册一个角度alpha。这样,您将能够在您的表面框架中碰撞后在您的对象和表面之间获得-alpha 角度,然后您需要通过简单地添加角度返回到“水平框架”你的表面。

    就您的实施而言,这是我的建议:

    • 从函数 horizontalToAngularFrame 开始,该函数将接受一个或多个参数,具体取决于您是在 2D 还是 3D 中,因此您可以定义角度
    • 用相同数量的参数编写另一个函数AngularFrameToHorizontal
    • 当对象进入碰撞时,只需像对待水平框架中的对象一样对待,并使用之前编码的 2 个函数将角度恢复到水平框架

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多