如何解决如何在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 举报,一经查实,本站将立刻删除。