微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在pygame中使用collidepoint?

如何解决如何在pygame中使用collidepoint?

我正在做一场足球比赛。 pygame应该在哪里检测到球与玩家之间的碰撞。我不确定我是在使用正确的功能,还是必须使用一些逻辑来检测它。如果确实需要使用一些逻辑。您能帮我理解一下逻辑吗?

解决方法

除非您的球是单个像素,否则您可能要使用colliderect()

为您的玩家创建一个PyGame Rect,并使用该矩形的(x,y)来移动它并使其变钝。球也一样。

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

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。由于球通常是圆形的,最终您可以使用“蒙版”碰撞进行调查,这种碰撞只会在图像中实际球所在的位置发生碰撞(例如,不在拐角处),但现在不必担心。>

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()

注意:这不是经过测试,调试的代码,只是写在我头上。可能会遇到拼写错误,错误等。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。