2016-05-15 46 views
0

我正在製作一個「突圍」風格的遊戲,我認爲能夠處理多個球會很有趣。這是在我的遊戲類run_logic()函數:Pygame沒有正確清空列表

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) 

它正常工作時,只有一個球,當它擊中游戲退出的理由。但是,一旦產生多個球(隨機擊中這些塊),它們是否全部擊中地面並不重要,我仍然不能死亡。我無法找到之前發佈的類似問題,我不知道爲什麼這不起作用,所以我會很感激一些幫助。

+1

您將相同的對象(self.ball)多次添加到self.ball_list中,但只有在球擊中底部時才移除它。你的失落情況不會是真的。 – Schore

+0

對不起,我不明白。這就是我想要它的工作原理:我有一個球開始,並且我大概每打出一個球就添加一個球。每當其中一個球落地時,比賽首先移除該球,然後檢查它是否是最後一個(如果列表是空的)。如果是,那麼遊戲結束。這不是真的嗎? –

+0

是的,但是你會產生更多的球,所以列表永遠不會變成空的,因爲它們被添加到球組中。 – marienbad

回答

0

問題是下面的,因爲在評論中已經指出:

你只檢查是否存儲在self.ball球應該被刪除。如果你添加更多球到列表中,你永遠不會檢查是否必須刪除它們,因爲它們是存儲在self.ball中的而不是

要修復它,請在循環中更新您的遊戲邏輯,在該循環中您會遍歷列表中的每一個球。