如何检测Pygame中对象之间的冲突?

时间:2016-01-25 19:58:27

标签: python pygame collision-detection collision

我正在Pygame中制作一个侧面游戏,如果狐狸精灵与树碰撞,它应该打印“COLLIDE”。但它不起作用。如何解决此问题以检测狐狸与树木之间的碰撞?这是代码:

if foxsprite1 > xtree  and foxsprite1 < xtree + treewidth or foxsprite1 + treewidth > xtree and foxsprite1 + treewidth < xtree + treewidth:
        print ("COLLIDE")

xtree是树的x坐标,treewidth是树的宽度,foxsprite1是狐狸。

1 个答案:

答案 0 :(得分:1)

将对象位置和大小保持为pygame.Rect()

fox_rect = pygame.Rect(fox_x, fox_y, fox_width, fox_height)
tree_rect = pygame.Rect(tree_x, tree_y, tree_width, tree_height)

然后你可以使用

if fox_rect.colliderect(tree_rect): 
     print("COLLIDE")

Rect()非常有用。你可以用它来blit

screen.blit(fox_image, fox_rect)

您可以使用它将对象置于屏幕中心

screen_rect = screen.get_rect()

fox_rect.center = screen_rect.center

或将对象保留在屏幕上(并且不能离开屏幕)

if fox_rect.right > screen_rect.right:
    fox_rect.right = screen_rect.right

if fox_rect.left < screen_rect.left:
    fox_rect.left = screen_rect.left

或更简单

fox_rect.clamp_ip(screen_rect)

请参阅:Program Arcade Games With Python And PygameExample code and programs