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)
它正常工作時,只有一個球,當它擊中游戲退出的理由。但是,一旦產生多個球(隨機擊中這些塊),它們是否全部擊中地面並不重要,我仍然不能死亡。我無法找到之前發佈的類似問題,我不知道爲什麼這不起作用,所以我會很感激一些幫助。
您將相同的對象(self.ball)多次添加到self.ball_list中,但只有在球擊中底部時才移除它。你的失落情況不會是真的。 – Schore
對不起,我不明白。這就是我想要它的工作原理:我有一個球開始,並且我大概每打出一個球就添加一個球。每當其中一個球落地時,比賽首先移除該球,然後檢查它是否是最後一個(如果列表是空的)。如果是,那麼遊戲結束。這不是真的嗎? –
是的,但是你會產生更多的球,所以列表永遠不會變成空的,因爲它們被添加到球組中。 – marienbad