如何使用python在pong中添加摩擦力?

时间:2016-06-03 19:28:09

标签: python python-3.x pygame pong

我想在乒乓球中添加摩擦力。当球击中球拍并且球拍移动时,球的速度可以改变,球的方向也可以改变。这是我的想法。但是,我不知道具体如何做到这一点。我希望我的解释清楚。这是我的代码片段:

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]

2 个答案:

答案 0 :(得分:1)

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

在这里,您可以看到绿色光线击中了桨叶的中心,因此,输出角度=输入角度。蓝光表示输出角>输入角度。

enter image description here

然而需要对输入和输出角度之间的系数进行一些调整,具体取决于游戏速度,划桨的大小,想要的行为......

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

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

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

答案 1 :(得分:1)

您希望将球拍速度的某些部分传达到球的速度,该部分表示为摩擦系数。

示例:

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

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

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