我想在乒乓球中添加摩擦力。当球击中球拍并且球拍移动时,球的速度可以改变,球的方向也可以改变。这是我的想法。但是,我不知道具体如何做到这一点。我希望我的解释清楚。这是我的代码片段:
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]
答案 0 :(得分:1)
原始乒乓游戏使用碰撞点检测系统。如果球碰撞桨,它将向45°移动,如果球撞到桨的侧面,它将更少。 因此,输入和输出发生率之间的关系是碰撞点的函数(您可以选择任何您想要的功能,例如将桨分成两部分或设置线性因子)。
在这里,您可以看到绿色光线击中了桨叶的中心,因此,输出角度=输入角度。蓝光表示输出角>输入角度。
然而需要对输入和输出角度之间的系数进行一些调整,具体取决于游戏速度,划桨的大小,想要的行为......
其他一些版本实现了一个可以根据球拍速度改变反射角度的球拍。
如果你想要一个真正的摩擦系统,你也可以使用一个物理引擎并调整不同的参数(拖动,...)。但是,通常,简单的实现足够且更有趣。
我建议您尝试不同的版本并选择最适合您游戏的版本。
答案 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
当球在左侧球拍上反弹时,球拍的一半速度会被施加到球上。
(请注意,我提到的是速度,而不是速度,它沿着各自的轴有一个方向,正或负,而速度是绝对标量。我在示例中使用了速度,因为符合您使用的命名,但您的实现确实是一种速度;您可能需要考虑重命名变量以保持一致性。)