Pygame <specified object> 对象在尝试生成超过 1 个敌人时不可调用

Pygame <specified object> object is not a callable when trying to spawn more than 1 enemy

我设法创建了一种方法来访问列表中的每个敌人并检测它是否被击中……我想……除了这个问题。我的问题是,每次我想创建多个敌人时,我都会收到错误 "Enemy is not a callable object"

老实说,我不知道这里出了什么问题。我查看了其他 post 和一个类似的 post 分享了一些关于 "making sure I don't make my object = anything else" 的内容。但是,除了将其添加到列表中之外,我的对象不会在其他任何地方被调用。

循环外

Enemies = []
print("Enemies at start: ",len(Enemies))

它returns“0”

在 while 循环中创建敌人

if len(Enemies) <= 5:
    Enemies.append(Enemy(random.randint(0,500),-50,70,70))
        #Spawns an enemy while the list is still less than 5 not really relevant and should be removed after code below is fixed.
    print("Enemies at creation point: ",len(Enemies))
    for Enemy in Enemies:
        #Enemies.append(Enemy(random.randint(0,500),-50,70,70))
        print("Created")
        if Enemy.health <= 0:
            Enemies.pop(Enemies.index(Enemy))
            print("Destroyed")
        else:
            print("Skipping")

错误:'Enemy' 对象不可调用

我希望输出只是在屏幕上的随机位置生成这些敌人。而5个并不同时存在。所以一开始,它不会再产生敌人。然而,当一个被摧毁时,一个新的会产生。

你的错误是你对 class 定义 Enemyfor Enemy in Enemies

中的变量使用了相同的名称

PEP 8 -- Style Guide for Python Code 中有一个很好的规则,即对变量使用小写名称,对 class 名称使用驼峰命名(首字母大写)

所以你应该

enemies = []
print("Enemies at start:", len(enemies))


if len(enemies) <= 5:
    enemies.append(Enemy(random.randint(0,500),-50,70,70))
        #Spawns an enemy while the list is still less than 5 not really relevant and should be removed after code below is fixed.
    print("Enemies at creation point: ", len(enemies))
    for enemy in enemies:
        #enemies.append(Enemy(random.randint(0,500),-50,70,70))
        print("Created")
        if enemy.health <= 0:
            enemies.pop(enemies.index(enemy))
            print("Destroyed")
        else:
            print("Skipping")

如您所见,我只在 Enemy(random.randint(0,500),-50,70,70) 中使用 Enemy。在其他地方我使用 enemy

顺便说一句:即使是 SO 中的编辑器也知道这个规则,它使用浅蓝色来显示 class Enemy 并使代码更具可读性。