我想要一个 if 语句在满足条件时将矩形添加到列表中,但它会一直添加它们直到条件为假

I want an if statement to add a rectangle to a list, when a condition is met, but it keeps adding them until the condition is false

总的来说,我对 pygame 和 python 很陌生,我正在尝试制作一款简单的游戏。在代码中,我在这里创建了一个 class Enemy 和一个它的实例。

class Enemy:
def __init__(self):
    self.list = []
    self.size = 20
    self.x = random.randint(0 , WIDTH - self.size)
    self.y = random.randint(70 , HEIGHT - self.size)
    self.new_enemy = pygame.Rect(self.x , self.y , self.size , self.size)

def add_enemy(self):
    if score % 5 == 0 and score != 0:
        self.list.append(self.new_enemy)
        print(enemy.list)
        #to see if it works
enemy = Enemy()

但是当我 运行 enemy.add_enemy() 时,当 score == 5(或 10、15 等)时,它不仅会向列表中添加一个项目,还会添加大量项目。有没有解决的办法?帮助将不胜感激。

所以我对此仍有疑问,因为我没有更多的代码。

但基本上这里发生的是 self.newenemy 被删除和创建,然后在 add_enemy 中你 运行 self.list.append(self.newenemy) 本质上是将相同的对象添加到列表。所以这个列表有 n 个对象,但它们都是“相同的”,而不是复制或重复,而是完全相同。所以如果你要“杀死”list[0] 敌人,他们都会死。

编辑:此外,您的 randint 将始终生成相同的值,因此一旦创建了 class,x 和 y 将始终相同。

尝试将您的代码更改为类似这样的内容。注意附加完成后 add_enemy 中的 return。

class Enemy:
    def __init__(self):
        self.list = []
        self.size = 20
    
    def add_enemy(self):
        if score % 5 == 0 and score != 0:
            self.list.append(pygame.Rect(self.get_rand_x() , self.get_rand_y() , self.size , self.size))
            return
        
    def get_rand_x(self):
        return random.randint(0 , WIDTH - self.size)

    def get_rand_y(self):
        return random.randint(70 , HEIGHT - self.size)


enemy = Enemy()
enemy.add_enemy()
print(enemy.list)