一尘不染

如何计算弹跳角?

c#

我玩了一段时间,但我根本无法弄清楚。

我制造了一个可以发射导弹的坦克,当导弹撞到墙壁时,我希望它们反弹,但我希望它们以合适的角度反弹。

现在我没有任何障碍,当导弹离开viewportRectangle我制造的导弹时,它们就会反弹。

我正在寻找的解决方案是否很高级?

有相对简单的方法吗?


阅读 335

收藏
2020-05-19

共1个答案

一尘不染

我认为更简单的方法是使用导弹的速度而不是计算角度。假设您有一枚导弹,该导弹具有xVelocityyVelocity表示其水平和垂直运动。这些速度可以为正或负,分别代表左,右,上或下。

  • 如果导弹击中顶部或底部边界,则反之yVelocity
  • 如果导弹击中了左或右边界,则反转导弹的标志xVelocity

这将使相反轴的运动保持不变。

ChrisF的答案中借来的图像,比方说,导弹从位置I开始发射。

反射角度

xVelocityyVelocity均为正的情况下(在2D图形中,右侧和向下通常为正),导弹将沿指示的方向行进。让我们只分配的值

xVelocity = 3
yVelocity = 4

当导弹在 C 位置击中墙壁时,它xVelocity不应改变,但yVelocity应反转至-4,以便其沿向上方向返回,但仍向右移动。

这种方法的好处是,你只需要保持一个导弹的轨道xPositionyPositionxVelocity,和yVelocity。仅使用这四个组件和游戏的更新速率,导弹将始终在正确的位置重绘。一旦遇到不成直角或没有移动的更复杂的障碍,使用X和Y速度将比使用角度容易得多。

2020-05-19