我正在做一个突破游戏,我坚持根据球击中桨的位置计算球从桨的反弹。我出来了以下ball.vx = (ball.x - paddle.x) / 10
它反弹,但在桨的两侧并不相同。例如,如果球击中球拍的最左侧,ball.vx 将为 -3.2,如果最右侧为 1.6。
我所做的是:ball.vy = 4 ball.vx = (ball.x - paddle.x) / 10
ball.x = ball.x + ball.vx
ball.y = ball.y + ball.vy
确保从每个对象的相同参考执行计算,而不是例如桨的中心和球的角。
(另外,考虑使用即使角度发生变化也能保持速度相同[或非常接近]的方程。)
您应该牢记这一点,ball.x
并paddle.x
参考ball和paddle的左侧。
假如说 :
ball.r
是球的半径paddle.w
是桨的宽度你应该尝试这样的事情:
ball.vx = (ball.x - ball.r/2 - paddle.x - padde.w/2) / 10
更新 :
ball.vx = ((ball.x + ball.width/2) - (paddle.x + padde.w/2)) / 10
(ball.x - ball.r/2
并paddle.x - padde.w/2
代表球和桨的中间)