洛与春风 发表于 2023-3-12 18:12:33

pygame 外星人入侵中的bug


from pygame.sprite import Sprite

class Alien(Sprite):
    def __init__(self,ai_game):
      super().__init__()
      self.screen = ai_game.screen
      self.settings = ai_game.settings
      self.image = pygame.image.load('images/alien.bmp')
      self.rect = self.image.get_rect()
      self.rect.x = self.rect.width
      self.rect.y = self.rect.height
      self.x = float(self.rect.x)


    def check_edges(self):
      # 判断外星人是否触碰边界
      self.screen_rect = self.screen.get_rect()
      if self.rect.right >= self.screen_rect.right or self.rect.left <= 0:
            return True

    def update(self):
      # 更新外星人位置
      self.x += self.settings.alien_speed*self.settings.alien_direction
      self.rect.x = self.x
上面是外星人类,下面是主程序关于外星人移动的
def _update_aliens(self):
      self.check_alien_edges()
      self.aliens.update()
      #print(self.settings.alien_direction)
      

    def check_alien_edges(self):
      for alien in self.aliens.sprites():
            if alien.check_edges():
                self._change_aliens_direction()
                break

    def _change_aliens_direction(self):
      for alien in self.aliens.sprites():
            # alien.rect.y += self.settings.alien_drop_speed
            self.settings.alien_direction *= -1

      # 外星人的设置参数
      self.alien_speed = 0.8   # 水平移动速度
      self.alien_direction = 1 # 移动方向
      self.alien_drop_speed = 10 # 竖直移动速度

当我未加入射击碰撞检测运行没有问题,加入后,只要有一个子弹击中外星人,整群外星人就会乱飞出屏幕
页: [1]
查看完整版本: pygame 外星人入侵中的bug