我目前正在编写一个像 Breakout 这样的游戏,我想知道如何正确地将球从表面反弹。
我采用了将速度旋转 90 度的简单方法,即:
[vx, vy] -> [-vy, vx]
哪个(不出所料)效果不佳。如果我知道球的位置和速度,以及球会击中的点(但会反弹),我怎么能从那个点反弹呢?
约束:
- 我正在使用整数数学(任何地方都没有 FP)
- 我所有的表面都是简单的平面(垂直、水平或块状)
- 我只想以 90 度角反弹
- 所有碰撞都是纯弹性的(这是突破——不需要摩擦等)
我不需要任何语言特定的代码。如果有人可以提供一个关于如何正确执行此操作的小型数学公式,那么这对我来说很好。
谢谢!