如何在pygame中使用collidepoint()?

如何在pygame中使用collidepoint()?,pygame,collision-detection,Pygame,Collision Detection,我正在做一场足球比赛。pygame应该检测球与球员之间的碰撞。我不确定我是否使用了正确的功能,或者我必须使用一些逻辑来检测它。如果你确实需要使用一些逻辑。你能帮我理解逻辑吗。除非你的球是一个像素,否则你可能想使用 为您的玩家创建一个PyGame,并使用该矩形的(x,y)来移动它,并对其进行blit。同样的球 这可能会给您一些代码,如: player_img = pygame.image.load( "player.png" ).convert_alpha() player_r

我正在做一场足球比赛。pygame应该检测球与球员之间的碰撞。我不确定我是否使用了正确的功能,或者我必须使用一些逻辑来检测它。如果你确实需要使用一些逻辑。你能帮我理解逻辑吗。

除非你的球是一个像素,否则你可能想使用

为您的玩家创建一个PyGame,并使用该矩形的
(x,y)
来移动它,并对其进行blit。同样的球

这可能会给您一些代码,如:

player_img = pygame.image.load( "player.png" ).convert_alpha()
player_rect= player_img.get_rect()
player_rect.topleft = ( player_start_x, player_start_y )

ball_img   = pygame.image.load( "ball.png" ).convert_alpha()
ball_rect  = ball_img.get_rect()
ball_rect.topleft = ( ball_start_x, ball_start_y )
还有一个非常简单的球碰撞函数。如果参数rect与基本rect在几何上重叠,则
colliderect()
仅返回True。由于球通常是圆的(ish),最终您可以使用“蒙面”碰撞进行调查,这只会在图像中实际球所在的位置(例如,不是角)发生碰撞-但现在不必担心

def playerAtBall( player_rect, ball_rect ):
    result = False
    if ( player_rect.colliderect( ball_rect ) ):
        result = True
    return result
然后,在主循环中将其全部放在一起:

### Main Loop
clock = pygame.time.Clock()
done = False
while not done:

    # Handle user-input
    for event in pygame.event.get():
        if ( event.type == pygame.QUIT ):
            done = True

    # Movement keys
    keys = pygame.key.get_pressed()
    if ( keys[pygame.K_LEFT] ):
        print("Move left")
        player_rect.x -= 1
    if ( keys[pygame.K_RIGHT] ):
        print("Move right")
        player_rect.x += 1

    # Is the player at the ball?
    if ( playerAtBall( player_rect, ball_rect ) ):
        print( "PLAYER AT BALL - DO SOMETHING!" )

    # redraw the screen
    window.fill( GREEN )
    window.blit( player_img, player_rect )
    window.blit( ball_img, ball_rect )
    pygame.display.flip()

    # Clamp FPS
    clock.tick_busy_loop(60)

pygame.quit()
注意:这不是经过测试、调试的代码,只是从我的头顶上写下来的。除了打字错误、错误等。

collidepoint()用于按钮,使用colliderect(),在球的x、y位置半径处做一个矩形