【发布时间】:2014-04-19 21:27:42
【问题描述】:
我对 Python 非常陌生,最近我一直致力于在 pygame 中创建一个小型的太空入侵者风格的游戏。然而,我几乎已经走到了尽头,我想做到这一点,如果敌舰(阻挡)与我的船(玩家)相撞,则会检测到碰撞,移除我的两艘船并显示一个简短的“游戏结束”消息。
到目前为止,我已经有了检测子弹和敌舰碰撞时的代码,我已经重写了这个代码,如果我的船和敌舰相撞,但是这个代码只有在我不开枪的情况下才有效,我也必须移动从一侧到另一侧检测碰撞(正面碰撞什么都不做)一旦检测到碰撞并且两艘船都消失了,我仍然能够从检测到碰撞的位置发射子弹。我不知道为什么会这样。如果有人可以帮助我,我一定会感激不尽。
这是有问题的代码:
for i in range(15):
block = Block(BLACK)
block.rect.x = random.randrange(screen_width)
block.rect.y = random.randrange(55) # change to 155 collisions fixed
block_list.add(block)
all_sprites_list.add(block)
for i in range(1):
player = Player()
player.rect.y = 480
player_list.add(player)
all_sprites_list.add(player)
...
for player in player_list:
player_hit_list = pygame.sprite.spritecollide(block, player_list, True)
for player in player_hit_list:
gameover.play()
player_list.remove(player)
all_sprites_list.remove(player)
block_list.remove(block)
all_sprites_list.remove(block)
for bullet in bullet_list:
block_hit_list = pygame.sprite.spritecollide(bullet, block_list, True)
for block in block_hit_list:
explosion.play()
bullet_list.remove(bullet)
all_sprites_list.remove(bullet)
score += 10
更新
我现在已经设法正确检测到碰撞,但是一旦船只消失(由于碰撞)我仍然可以开火。有什么方法可以在碰撞发生后隐藏子弹?
这是我更新的代码:
for i in range(15):
block = Block(BLACK)
block.rect.x = random.randrange(screen_width)
block.rect.y = random.randrange(55) # change to 155 collisions fixed
block_list.add(block)
all_sprites_list.add(block)
for i in range(1):
player = Player()
player.rect.y = 480
player_list.add(player)
all_sprites_list.add(player)
...
for player in player_list:
block_hit_list = pygame.sprite.spritecollide(player, block_list, True)
for block in block_hit_list:
gameover.play()
player_list.remove(player)
all_sprites_list.remove(player)
block_list.remove(block)
all_sprites_list.remove(block)
for bullet in bullet_list:
block_hit_list = pygame.sprite.spritecollide(bullet, block_list, True)
for block in block_hit_list:
explosion.play()
bullet_list.remove(bullet)
all_sprites_list.remove(bullet)
score += 10
【问题讨论】:
标签: python-3.x pygame collision