如何使用 python 增加乒乓球的摩擦力?

How to add friction in pong by using python?

我想在乒乓球中增加摩擦力。当球击中球拍,球拍运动时,可以改变球的速度,也可以改变球的方向。这是我的想法。但是,我不知道如何具体执行此操作。我希望我的解释很清楚。这是我的代码片段:

def moveDot(surface,center, ball_speed,ball_radius,right_paddle,left_paddle):
size = surface.get_size()
for coord in range(0, 2):
    center[coord] = center[coord] + ball_speed[coord]
    # Left edge or the top edge
    if center[coord] < ball_radius:
        ball_speed[coord] = -ball_speed[coord]
    # Right edge or the bottom edge
    if center[coord] + ball_radius > size[coord]:
        ball_speed[coord] = -ball_speed[coord]
    # Left paddle bounce and go through
    if left_paddle.collidepoint(center) and ball_speed[0] < 0:
        ball_speed[0] = -ball_speed[0]
    # Right paddle bounce and go through
    if right_paddle.collidepoint(center) and ball_speed[0] > 0:
        ball_speed[0] = -ball_speed[0]

最初的乒乓球游戏使用碰撞点检测系统。如果球撞到球拍,它会向 45° 移动,如果球撞到球拍的侧面,它会更小。 因此,输入和输出关联之间的关系是碰撞点的函数(您可以选择任何您想要的函数,例如将桨分成两部分或设置线性因子) .

这里可以看到,绿色光线打在桨的中心,所以,输出角度=输入角度。蓝色光线表示输出角度 > 输入角度。

但是这需要根据游戏速度、桨的大小、想要的行为等对输入和输出角度之间的系数进行一些调整 ...

一些其他版本实现了一个可以根据桨的速度改变反射角度的桨。

如果你想要一个真正的摩擦系统,你 也可以使用物理引擎 并调整不同的参数(拖动,...)。但是,一般来说,简单的实现就足够了,而且更有趣。

我建议您尝试不同的版本,然后选择最适合您游戏的版本。

您需要将球拍速度的一部分传递给球的 y 速度,该部分表示为摩擦系数。

示例:

if left_paddle.collidepoint(center) and ball_speed[0] < 0:
    ball_speed[0] = -ball_speed[0]
    ball_speed[1] += 0.5 * left_paddle.speed

当球弹到左侧球拍时,球拍速度的一半被施加到球上。

(请注意,我说的是速度,而不是速度,它沿相应的轴有一个方向,正向或负向,而速度是一个绝对标量。我在示例中使用了速度,因为它适合您使用的命名,但您的实现确实是一个速度;为了保持一致性,您可能需要考虑重命名变量。)