我正在制作一个乒乓球克隆来练习我的编码,但我一直坚持使球在被球拍击打时能够改变角度。

我当前的实现有一个deltaX和deltaY来表示球,它随游戏循环移动以移动球。我这样做的方法是,如果您在桨运动的同时击球,则deltaY会根据桨的方向而增加或减少,但这对游戏来说根本不自然。

有谁知道这样做的更好方法?

最佳答案

我要做的第一件事是将deltaX和deltaY更改为ballAngle和deltaSpeed。这样,您就可以从直角坐标系移动到极坐标系。由于球的运动性质(直线运动,每次撞击都会改变直线的角度),这会使您的工作更加轻松。从现在开始,您只需更改ballAngle即可更新球的方向。

但是,您必须更新绘制球的功能,以使其从极坐标移回直角坐标,以便可以在屏幕上显示它。一点点高中三角法将使您根据角度和速度来计算屏幕位置增量:

newPosition = oldPosition + movementVector


与:

movementVector.x = deltaSpeed*cos(ballAngle)
movementVector.y = deltaSpeed*sin(ballAngle)


当然,这些方程可能需要相对于您测量球的角度进行一些修改。

现在,要在每次与球拍碰撞时修改球的角度,只需要根据球触到球拍的哪一部分来增加或减小球的角度,绘图功能中的数学就应该负责更新x和y现实地定位。

我希望这有帮助。

10-08 02:17