我正在制作一个乒乓克隆来练习我的编码,并且我一直坚持让球在被球拍击中时能够改变角度。
我当前的实现有一个球的 deltaX 和 deltaY,它们随着游戏循环移动以移动球。我这样做的方式是,如果您在球拍移动时击球,deltaY 会根据球拍的方向增加或减少,但这对于游戏来说一点也不自然。
有谁知道这样做的更好方法?
我要做的第一件事是将 deltaX 和 deltaY 更改为 ballAngle 和 deltaSpeed。这样,您将从直角坐标系移动到极坐标系。由于球运动的性质(直线运动并在每次击球时改变直线的角度),这将使您的工作更轻松。从现在开始,您只需更改 ballAngle 即可更新球的方向。
但是,您必须更新绘制球的函数,使其从极坐标回到直角坐标,以便您可以在屏幕上显示它。一点高中三角学可以让你根据你的角度和速度计算屏幕位置增量:
newPosition = oldPosition + movementVector
和:
movementVector.x = deltaSpeed*cos(ballAngle)
movementVector.y = deltaSpeed*sin(ballAngle)
当然,这些方程式可能需要根据您测量球的角度进行一些修改。
现在要在每次与球拍碰撞时修改球的角度,您只需要根据球拍接触球拍的哪个部分来增加或减少球的角度,并且绘图函数中的数学应该负责更新 x 和 y现实的立场。
我希望这有帮助。