为什么在pygame中不能杀死特定的物体



我正在制作一个游戏,飞船发射子弹杀死敌人,在游戏中,子弹击中敌人时敌人应该消失,飞船击中敌人时应该消失。当我测试代码时,子弹击中敌人时,敌人确实消失了,然而,飞船击中敌人时并没有消失。由于这两个动作使用了相同的逻辑,我不明白为什么一个有效,而另一个无效。这是我的代码:

# Make a ship.
ship = Ship(ai_settings, screen)
# Make a group to store bullets
bullets = Group()
# Make the enemy
enemys = Group() 
all_sprites = Group()
all_sprites.add(ship)
# Start the main loop for the game.
while True:
check_events(ai_settings, screen, ship, bullets, enemys)
ship.update()
#enemys.update()
# Get rid of bullets that have disappeared. 
gf.update_bullets(bullets)
gf.update_enemys(enemys)
gf.update_screen(ai_settings, screen, ship, bullets, enemys)
mouse_position = pygame.mouse.get_pos()
for event in pygame.event.get():
if event.type == pygame.MOUSEBUTTONDOWN:
if 20 + 50 > mouse_position[0] > 20 and 20 + 20 > mouse_position[1] > 20:
play_music = not play_music
if play_music:
pygame.mixer.music.unpause()
else:
pygame.mixer.music.pause()
elif event.type == pygame.KEYDOWN:
check_keydown_events(event, ai_settings, screen, ship, bullets)
elif event.type == pygame.KEYUP:
check_keyup_events(ai_settings, screen, event, ship, bullets)
elif event.type == ADDENEMY:
gf.generate_enemy(ai_settings, screen, enemys, all_sprites)
for any_enemy in enemys:
if ship.rect.colliderect(any_enemy):
ship.kill()
for any_bullet in bullets:
if any_bullet.rect.colliderect(any_enemy):
any_enemy.kill()
any_bullet.kill()
ship.kill()

kill函数不会神奇地从屏幕上擦除Sprite

它只是将Sprite从其所有组中删除。

因此,请确保您实际使用Group来绘制您的飞船精灵。


您没有显示所有相关的代码,但由于您调用了一个名为update_screen的函数并将screenship传递给它,我会有根据地猜测,您可以"手动"将船闪电式地拖到屏幕上,而不是使用Group来绘制它。


您已经有一个名为all_spritesGroup,所以在屏幕上绘制所有精灵应该像调用all_sprites.draw(screen)一样简单。只需确保将所有精灵添加到此Group即可。

相关内容

  • 没有找到相关文章

最新更新