for循环中的动作不影响组中的所有精灵

Acton in for loop not affecting all sprites in a group

试图制作一个 space 入侵者风格的游戏,我想使用 for 循环影响所有敌人 - 但是根据显示的代码,我得到一个逻辑错误,其中只有第一个敌人受到影响,并且只有第一个敌人可以access/use敌人class内的enemy.moveLR()方法。 class 的方法没有突出显示为黄色,VS Code 的智能感知也没有将其拾取。

关于敌人的代码:

class Enemy(pygame.sprite.Sprite):

    def __init__(self,path):

        super().__init__()

        self.image = pygame.image.load(path)
        self.rect = self.image.get_rect()

        self.xChange = 0
        self.hp = 0
    
    def moveLR(self):

        if self.rect.x >= 750 and self.xChange > 0:

            self.xChange = -5
            self.rect.y = self.rect.y +30
        
        if self.rect.x <= 0 and self.xChange < 0:

            self.xChange = 5
            self.rect.y = self.rect.y +30

还有我的主循环,包括不起作用的代码: (最后的 for 循环)


while running:

        for event in pygame.event.get():

            if event.type == pygame.QUIT:

                pygame.quit()
                quit()

            if event.type == pygame.MOUSEBUTTONDOWN:

                bullet = Bullet('bullet.png')
                allActiveSpritesList.add(bullet)
                bulletList.add(bullet)
                bullet.rect.x = player.rect.x + 45
                bullet.rect.y = player.rect.y
            
            if event.type == pygame.KEYDOWN:

                if event.key == pygame.K_a:

                    player.goLeft()
                
                if event.key == pygame.K_d:

                    player.goRight()
            
            if event.type == pygame.KEYUP:

                if event.key == pygame.K_a or pygame.K_d:

                    player.stop()

        player.rect.x += player.changeX
        player.rect.y += player.changeY
        
        enemy.rect.x += enemy.xChange

        timer = timer + 1
            
        for enemy in enemyList:
            
            enemy.moveLR()

感谢任何能提供帮助的人。

你必须移动enemyList.中的所有敌人移动循环中的enemy

# enemy.rect.x += enemy.xChange           <-- DELETE

timer = timer + 1

for enemy in enemyList:
    enemy.rect.x += enemy.xChange       # <-- INSERT
    enemy.moveLR()

我建议在moveLR方法中完成所有动作:

class Enemy(pygame.sprite.Sprite):
    # [...]

    def moveLR(self):

        self.rect.x += self.xChange     # <---

        if self.rect.x >= 750 and self.xChange > 0:

            self.xChange = -5
            self.rect.y = self.rect.y +30
        
        if self.rect.x <= 0 and self.xChange < 0:

            self.xChange = 5
            self.rect.y = self.rect.y +30
for enemy in enemyList:
    enemy.moveLR()