我正在制作一款“突围”风格的游戏,我认为能够处理多个球会很有趣。这是我的游戏类中的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)
当只有一个球,当它击中地面时游戏退出时,它可以正常工作。但是一旦产生多个球(通过撞击块随机),如果所有球都撞到地面并不重要,我仍然无法死亡。我之前找不到一个类似的问题,我不知道为什么这不起作用所以我真的很感激一些帮助。
答案 0 :(得分:0)
问题如下,正如评论中已经指出的那样:
您只能检查是否应移除存储在self.ball中的球。如果您在列表中添加更多球,则永远不会检查是否必须删除这些球,因为它们 存储在self.ball中。
要修复它,请在循环中更新游戏逻辑,然后在其中查看列表中的每个球。