为了账号安全,请及时绑定邮箱和手机立即绑定

外星人入侵 - Pygame - 外星人走出屏幕

外星人入侵 - Pygame - 外星人走出屏幕

波斯汪 2024-01-16 10:47:15
我正在根据 Python 速成课程书制作外星人入侵游戏项目,并陷入了外星人舰队应该向右行驶直到到达屏幕右边缘、改变方向并向左行驶等部分。问题是我的外星人确实改变了方向,但只有当方块中的第一个外星人(第一个一直在左边)击中屏幕的右边缘时。他右边的所有外星人都经过了右边的边缘。似乎它无法识别右侧外星人的矩形,该矩形应该首先击中右侧边缘,但只能识别左侧第一个外星人的矩形......我严格按照书上的说明进行操作,并且检查了 3 次,问题可能出在哪里。你能帮我找出问题所在吗?settings.pyclass Settings:    """A class to store all settings for Alien Invasion."""    def __init__(self):        """Initialize the game's settings."""        # Screen settings        self.screen_width = 1200        self.screen_height = 800        self.bg_color = (230, 230, 230)        self.ship_speed = 1.5        # Bullet settings        self.bullet_speed = 1.0        self.bullet_width = 3        self.bullet_height = 15        self.bullet_color = (60, 60, 60)        self.bullets_allowed = 3        # Alien settings        self.alien_speed = 1.0        self.fleet_drop_speed = 10        # fleet_direction of 1 represents right; -1 represents left.        self.fleet_direction = 1alien.pyimport pygamefrom pygame.sprite import Spriteclass Alien(Sprite):    """A class to represent a single alien in the fleet."""    def __init__(self, ai_game):        """Initialize the alien and set its starting postion."""        super().__init__()        self.screen = ai_game.screen        self.settings = ai_game.settings        # Load the alien image and set its rect attribute.        self.image = pygame.image.load('images/alien.bmp')        self.rect = self.image.get_rect()        # Start each new alien near the top left of the screen.        self.rect.x = self.rect.width        self.rect.y = self.rect.height        # Store the alien's exact horizontal position.        self.x = float(self.rect.x)    def check_edges(self):        """Return True if an alien is at edge of screen."""        screen_rect = self.screen.get_rect()        if self.rect.right >= screen_rect.right or self.rect.left <= 0:            return True
查看完整描述

1 回答

?
温温酱

TA贡献1752条经验 获得超4个赞

这是缩进的问题。你需要找到第一个撞到边缘的外星人,然后打破循环。实际上,你总是在列表中的第一个敌人之后中断循环:

class AlienInvasion:

    # [...]


    def _check_fleet_edges(self):

        """Respond appropriately if any aliens have reached an edge."""

        for alien in self.aliens.sprites():

            if alien.check_edges():

                self._change_fleet_direction()


                #-->| INDENTATION

                break

            

            # break <-- DELETE


查看完整回答
反对 回复 2024-01-16
  • 1 回答
  • 0 关注
  • 21 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信