计算球的弹跳

我正在开发一个打砖块游戏,目前遇到了一些问题,需要计算当球撞到球拍时的反弹方向。我写了下面这段代码ball.vx = (ball.x - paddle.x) / 10,它能够让球反弹,但是球却不能在球拍两边反弹的一样高。例如,如果球撞击到球拍的最左侧,ball.vx为-3.2,而如果撞击到最右侧,ball.vx为1.6。

我所做的是:

ball.vy = 4
ball.vx = (ball.x - paddle.x) / 10

ball.x = ball.x + ball.vx
ball.y = ball.y + ball.vy
点赞
用户20862
用户20862

请确保在每个对象上执行计算时使用相同的参考点,而不是例如球拍的中心和球的角落。

(此外,考虑使用方程式,即使角度改变,也能保持速度相同 [或非常相近]。)

2013-07-06 20:40:58
用户2498629
用户2498629

你应该记住,ball.xpaddle.x 指的是 球拍左侧

假设:

  • ball.r 是球的半径
  • paddle.w 是球拍的宽度

你应该尝试像这样做:

ball.vx = (ball.x - ball.r/2 - paddle.x - paddle.w/2) / 10

更新:

ball.vx = ((ball.x + ball.width/2) - (paddle.x + paddle.w/2)) / 10

( ball.x - ball.r/2paddle.x - paddle.w/2表示球拍的中心)

2013-07-06 21:09:02