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