我玩了一段时间,但我就是想不通。
我做了一个发射导弹的坦克,当导弹击中墙壁时,我希望它们弹开,但我希望它们弹回正确的角度。
现在我没有任何障碍物,导弹一超出范围就会弹开viewportRectangle
I made.
我正在寻找的解决方案相当先进吗?
有没有一种相对简单的方法可以实现呢?
您可能会认为,由于墙壁与坐标轴对齐,因此编写特殊情况代码是有意义的(对于垂直墙壁,否定速度的 x 坐标;对于水平墙壁,否定速度的 y 坐标) )。然而,一旦你让游戏在垂直和水平墙壁上运行良好,你可能会想到的下一件事是,“任意角度的墙壁怎么样?”因此,值得从一开始就考虑一般情况。
在一般情况下,假设你的导弹有速度v并撞到表面法线的墙壁n.
Split v成组件u垂直于墙壁并且w与它平行。
Where:
u = (v · n / n · n) n
w = v − u
Here, v · n is the 点积向量的v and n。有关如何计算它的说明,请参阅链接。点积n · n计算为法向量长度的平方;如果你总是保持法线的形式单位向量 then n · n= 1 并且可以省略除法。
弹跳后,平行于墙壁的运动分量受到摩擦力的影响f,垂直于壁的分量受到弹性的影响,可以以 a 的形式给出恢复系数 r.
所以碰撞后的速度为v′ = f w − r u。在完全弹性、无摩擦的碰撞中,v′ = w − u;也就是说,运动反映了碰撞点的法线,如比尔回答中给出的图表所示。
这种方法在三个维度上也同样有效。
(显然,这是一个非常简化的弹跳概念;它没有考虑角动量或变形。但对于许多类型的视频游戏来说,这种简化是完全足够的。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)