【发布时间】:2011-02-20 03:54:36
【问题描述】:
我目前正在编写一个像 Breakout 这样的游戏,我想知道如何才能正确地将球从表面反弹。
我采用了将速度旋转 90 度的幼稚方式,即:
[vx, vy] -> [-vy, vx]
其中(不出所料)效果不佳。如果我知道球的位置和速度,以及球会击中的点(但会反弹),我该如何将球从该点反弹?
约束:
- 我正在使用整数数学(无 FP 任何地方)
- 我所有的表面都很简单 平面(垂直, 水平,或块)
- 我只想以 90 度角反弹
- 所有碰撞都是纯弹性的(这是突破 -- 无需摩擦等)
我不需要任何特定于语言的代码。如果有人可以提供一个关于如何正确执行此操作的小型数学公式,那么这对我来说很好。
谢谢!
【问题讨论】:
-
将速度旋转 180° 将是
[vx, vy] -> [-vx, -vy]。你现在旋转了 90°。 -
我错了,我的意思是写 90 度,而不是 180 度。
-
要获得适当的突破,您还必须将动作从球棒转移到球上。