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

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

现在我没有任何障碍,当导弹超出我制作的viewportRectangle时就会反弹。

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

有相对简单的方法吗?

最佳答案

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

  • 如果导弹击中顶部或底部边界,请反转yVelocity的符号。
  • 如果导弹击中左边界或右边界,则反转xVelocity的符号。

  • 这将使相反轴的移动保持相同。

    ChrisF's answer借用图像,假设导弹从位置I开始。

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

    当导弹在 C 位置击中墙壁时,其xVelocity不应更改,但其yVelocity应反转为-4,以便其向上返回,但始终向右移动。

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

    10-08 19:00