我对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
对于为什么这可能无法正常工作的任何帮助都会受到欢迎。谢谢:))
答案 0 :(得分:1)
除非earthlife == 0,否则你永远不会从bullet_list中删除子弹。因为所有东西都在一段时间内是真的:循环,你的单个子弹会一直撞击地球直到它死亡。
编辑:我注意到你正在移除子弹,如果bullet.rect.y< -10。如果子弹击中地球,它会一直持续到if语句满足吗?