尝试产生1个以上敌人时,Pygame <specified object =“”>对象无法被召唤

时间:2019-04-04 20:55:13

标签: python-3.x pygame collision-detection

我设法创建了一种方法来访问列表中的每个敌人,并检测它是否被击中了……我认为……除了问题之外。我的问题是,每当我要创建多个敌人时,都会收到错误消息:“敌人不是可召唤的对象”

老实说,我不知道这里出了什么问题。 Ive查看了其他帖子,一个类似的帖子分享了一些有关“确保我不做我的对象=其他东西”的内容。但是,除了将对象添加到列表中之外,没有其他地方调用我的对象。

循环之外

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

返回“ 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")

错误:“敌人”对象不可调用

我希望输出只是在屏幕上随机位置产生这些敌人。虽然5不同时存在。因此,一开始它不会再产生敌人。但是,当一个被销毁时,会产生一个新的。

1 个答案:

答案 0 :(得分:2)

您的错误是您对类定义Enemy和变量for Enemy in Enemies使用相同的名称

PEP 8 -- Style Guide for Python Code中有一个很好的规则,将小写名称用作变量,将驼峰式名称(首字母大写)用作类名

所以您宁可拥有

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中使用Enemy(random.randint(0,500),-50,70,70)。在其他地方,我使用enemy

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