如何检查组中的精灵是否与其组内的其他人发生碰撞?

时间:2017-07-23 15:04:49

标签: python pygame

是否可以检查pygame组中的pygame sprite是否与其组内的其他sprite发生碰撞?

到目前为止,这是我的代码:

def update(self, blocks):
    if not pygame.sprite.spritecollideany(self, blocks):
        self.rect.y += 1

此更新功能在每个块中。

1 个答案:

答案 0 :(得分:1)

您可以遍历精灵组,先检查是否self != block并使用Rect.colliderect进行碰撞检测。

for block in blocks:
    if self != block and self.rect.colliderect(block.rect):
        # Do something for every collided block.

或者查看是否有任何精灵与self发生碰撞。

collided = any(self.rect.colliderect(block.rect)
               for block in blocks if self != block)

如果需要,您还可以为collidedpygame.sprite.spritecollide编写自定义spritecollideany回调函数。

# Define this in the global scope or add it as a class method.
def collided(sprite, other):
    return sprite != other and sprite.rect.colliderect(other.rect)

然后在您的主循环中将collided回调函数传递给spritecollideany

if not pygame.sprite.spritecollideany(self, blocks, collided):