Pygame Sprite Collision

时间:2014-04-14 16:13:46

标签: python-3.x pygame collision detection

我一直致力于在pygame中创建一个小型的太空入侵者风格游戏。我差不多已经到了尽头,如果敌人的船只与我的船发生碰撞,我会想要这样做,发现碰撞,游戏结束。

到目前为止,我已经有了用于检测子弹和敌舰发生碰撞的代码,但是当我试图为敌人/玩家碰撞重写它时它没有按预期工作,所以我认为我做的事情不正确。

有问题的代码:

for block in block_list:

    player_hit_list = pygame.sprite.spritecollide(block, player_list, True)

    for player in player_hit_list:
        explosion.play()
        block_list.remove(block)
        player_list.remove(player)
        all_sprites_list.remove(block)
        all_sprites_list.remove(player)

    if block.rect.y < +10:
        block_list.remove(block)
        all_sprites_list.remove(block)  

完整代码:http://pastebin.com/FShPuR6A

有人能告诉我为什么我的代码无法运作吗?

非常感谢

1 个答案:

答案 0 :(得分:0)

class Block(pygame.sprite.Sprite):
    def __init__(self, color):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.image.load("spaceship.png")
        self.rect = self.image.get_rect()

    def update(self):
        self.rect.y += 1

class Player(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        self.x=0
        self.y=0
        self.image = pygame.image.load("alien.png")
        self.rect = self.image.get_rect()

    def update(self):
        pos = pygame.mouse.get_pos()
        self.rect.x = pos[0]

乍一看,你有一个Block类,有一张像外星人一样移动的宇宙飞船的照片。 Player类,有一个外星人的图像,并用鼠标移动。

我的建议是重命名课程,以便你知道什么是什么。发现错误会更容易。

编辑:

看起来你的玩家根本不动:

def render(self):
        if (self.currentImage==0):
            screen.blit(self.image, (self.x, self.y))

您可以通过self.rect.x更新播放器,但使用self.xself.y进行绘制。