如何使用 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
当球弹到左侧球拍时,球拍速度的一半被施加到球上。
(请注意,我说的是速度,而不是速度,它沿相应的轴有一个方向,正向或负向,而速度是一个绝对标量。我在示例中使用了速度,因为它适合您使用的命名,但您的实现确实是一个速度;为了保持一致性,您可能需要考虑重命名变量。)
我想在乒乓球中增加摩擦力。当球击中球拍,球拍运动时,可以改变球的速度,也可以改变球的方向。这是我的想法。但是,我不知道如何具体执行此操作。我希望我的解释很清楚。这是我的代码片段:
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
当球弹到左侧球拍时,球拍速度的一半被施加到球上。
(请注意,我说的是速度,而不是速度,它沿相应的轴有一个方向,正向或负向,而速度是一个绝对标量。我在示例中使用了速度,因为它适合您使用的命名,但您的实现确实是一个速度;为了保持一致性,您可能需要考虑重命名变量。)