|
发表于 2023-10-5 17:38:39
|
显示全部楼层
这个问题是因为在主体代码中的循环中,对于每个大型敌机,都会再次遍历中型敌机和小型敌机,而且这个遍历没有缩进到大型敌机的循环中。因此,每个大型敌机都会再次遍历中型敌机和小型敌机,并且每个小型敌机和中型敌机都会移动和绘制两次,导致出现“飞机雨”的问题。要解决这个问题,只需要将中型和小型敌机的遍历缩进到大型敌机的循环中即可。修改后的代码如下:
- while running:
- for event in pygame.event.get():
- if event.type == QUIT:
- pygame.quit()
- sys.exit()
- key_pressed = pygame.key.get_pressed()
- if key_pressed[K_w] or key_pressed[K_UP]:
- me.moveUp()
- if key_pressed[K_s] or key_pressed[K_DOWN]:
- me.moveDown()
- if key_pressed[K_a] or key_pressed[K_LEFT]:
- me.moveLeft()
- if key_pressed[K_d] or key_pressed[K_RIGHT]:
- me.moveRight()
- screen.blit(background, (0, 0))
- for each in big_enemies:
- each.move()
- if switch_image:
- screen.blit(each.image1,each.rect)
- else:
- screen.blit(each.image2,each.rect)
- if each.rect.bottom > -50:
- enemy.fly_sound.play()
- for each in mid_enemies:
- each.move()
- screen.blit(each.image,each.rect)
- for each in small_enemies:
- each.move()
- screen.blit(each.image,each.rect)
- if switch_image:
- screen.blit(me.image1,me.rect)
- else:
- screen.blit(me.image2,me.rect)
- if not(delay % 5):
- switch_image = not switch_image
- delay -= 1
- if not delay:
- delay = 100
- pygame.display.flip()
- clock.tick(60)
复制代码 |
|