首页 > 解决方案 > Python附加到错误的列表?

问题描述

我无法理解这个问题。我有一个Player对象和一些都从类Enemy继承的对象。Actor两者Player都有让他们射出子弹的方法Enemyshoot(self)这个子弹应该被添加到他们各自的射弹列表中,但是当程序调用self.projectiles.append(Projectile())一个敌人时,它会将它添加到玩家的射弹列表中。

我已经运行了一个程序,其中射击任何子弹的唯一 Actor 是敌人,我观察到len(player.projectiles)返回越来越大的值,即使它不应该增长。任何帮助表示赞赏。每次程序更新时,此块都会运行,它会遍历Game对象的敌人列表并分别更新每一个:

for enemy in self.enemies:
    enemy.update(self.player)

这是Enemy课程:

class Enemy(Actor):

    def shoot(self):
        image = pygame.transform.rotate(ProjectileImage, self.angle)
        self.projectiles.append(Projectile(self.getCenter()[0] - 6, self.getCenter()[1] - 16, 12, 32, image, 5, self.angle, True))
        shootingSound.play()

    def tryToShoot(self):
        if self.attackCoolDown >= 30:
            self.attackCoolDown = 0
            self.shoot()

    def update(self, player):
        self.pointTowards(player.x, player.y)
        Actor.update(self)
        self.tryToShoot()

Actor初始化projectiles

class Actor(Entity):
    projectiles = []

标签: pythonlistobjectpygame

解决方案


您发布的代码显示projectiles属性,而不是实例属性。因此,所有Actors 共享一个projectiles列表。要制作单独的列表,请在方法内初始化属性__init__


推荐阅读