仅在获得'得分时才删除精灵。满足 - Python

时间:2014-05-05 15:25:50

标签: python pygame sprite collision

我对python相对较新,并且已经开始制作一个小型太空入侵者风格游戏,其中你扮演一个外星入侵的地球。最后一级涉及在地球上射击以赢得比赛。我把它设置为地球的健康状况为500,每次击中时它降低10点。一旦地球的健康状况达到0,我希望删除图像并发出爆炸声和祝贺信息,目前我有这段代码:

earth_list = pygame.sprite.Group()
earthlife = 500

...

class Earth(pygame.sprite.Sprite):
    def __init__(self, color):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.image.load("Files/Images/Earth.png")
        self.rect = self.image.get_rect()
        self.rect.x = 400
        self.rect.y = 0
        self.earthlife = 500

...

for i in range(1):
    earth = Earth(BLACK)
    block.rect.x = 400
    block.rect.y = 0
    earth_list.add(earth)
    all_sprites_list.add(earth)

...

for bullet in bullet_list:

    earth_hit_list = pygame.sprite.spritecollide(bullet, earth_list, True)

    for earth in earth_hit_list:
        explosion.play()
        earthlife -= 10

        if earthlife == 0 and health >=25:
            win.play()
            label = font.render("GAME COMPLETE", 1, (0,255,0))
            labelRect = label.get_rect()
            labelRect.center = (400, 250)
            labelC = font.render("PRESS ENTER TO RETURN TO MAIN MENU", 1, GREEN)
            labelCRect = labelC.get_rect()
            labelCRect.center = (250, 300)
            bullet_list.remove(bullet)
            all_sprites_list.remove(bullet)
            break

    if earthlife == 0:
        collision.stop()
        laser.stop()
        explosion.stop()
        earth_list.remove(earth)
        all_sprites_list.remove(earth)
        bullet_list.remove(bullet)
        all_sprites_list.remove(bullet)
        player_list.remove(player)
        all_sprites_list.remove(player)

然而它似乎没有正常运作,并且在我的船只子弹的第一次击中时,地球图像被移除,无论其健康水平如何。以下是我的其余代码,以防它帮助任何人: http://pastebin.com/p82JGs6q

对于为什么这可能无法正常工作的任何帮助都会受到欢迎。谢谢:))

1 个答案:

答案 0 :(得分:1)

除非earthlife == 0,否则你永远不会从bullet_list中删除子弹。因为所有东西都在一段时间内是真的:循环,你的单个子弹会一直撞击地球直到它死亡。

编辑:我注意到你正在移除子弹,如果bullet.rect.y< -10。如果子弹击中地球,它会一直持续到if语句满足吗?