Pygame没有正确清空列表



我正在制作一款"突破"风格的游戏,我认为能够处理多个球会很有趣。这是我的游戏类中的run_logic()函数

def run_logic(self):
    if not self.game_over:
        self.all_sprites_list.update()
        if self.ball.y > SCREEN_HEIGHT:
            self.ball_list.remove(self.ball)
            self.all_sprites_list.remove(self.ball)
            if len(self.ball_list) == 0:
                self.game_over = True
        bounce_balls = pygame.sprite.spritecollide(self.player, self.ball_list, False)
        if len(bounce_balls) > 0:
            for b in bounce_balls:
                diff = (self.player.rect.x + self.player.width/2) - (b.rect.x + b.width/2)
                b.rect.y = SCREEN_HEIGHT - 50 - b.rect.height
                b.bounce(diff)
        for ball in self.ball_list:
            dead_blocks = pygame.sprite.spritecollide(ball, self.block_list, True)
            if len(dead_blocks) > 0:
                ball.bounce(0)
                power1 = random.randrange(0, 10)
                if power1 == 1:
                    self.ball = Ball(self.level)
                    self.ball_list.add(self.ball)
                    self.all_sprites_list.add(self.ball)
            if len(self.block_list) == 0:
                self.game_over = True
                self.level += 1

这里是__init__()函数,如果它有帮助的话:

def __init__(self):
    self.game_over = False
    self.block_list = pygame.sprite.Group()
    self.ball_list = pygame.sprite.Group()
    self.all_sprites_list = pygame.sprite.Group()
    top = 40
    block_height = 30
    for row in range(4):
        for column in range(0, 1):  # 29
            block = Block(BLOCK_COLOUR_LIST[self.level], column * 65 + 6, top)
            self.block_list.add(block)
            self.all_sprites_list.add(block)
        top += block_height + 10
    self.player = Player(self.level)
    self.all_sprites_list.add(self.player)
    self.ball = Ball(self.level)
    self.ball_list.add(self.ball)
    self.all_sprites_list.add(self.ball)

当只有一个球时,它很好,当它落地时,比赛就结束了。但一旦产生了多个球(通过击打盖帽随机产生),如果所有球都落地也没关系,我仍然不会死。我以前在这里找不到类似的问题,我不知道为什么这不起作用,所以我真的很感激你的帮助。

正如评论中已经指出的那样,问题如下:

您只需检查存储在self.ball中的球是否应该被移除。如果你在列表中添加了更多的球,你永远不会检查这些球是否也必须删除,因为它们是而不是存储在self.ball中。

要解决这个问题,请在循环中更新游戏逻辑,即遍历列表中的每个球。

相关内容

  • 没有找到相关文章

最新更新