尝试生成超过 1 个敌人时,对象不是可调用对象,python-3.x,pygame,collision-detection"/>

首页 > 解决方案 > 游戏尝试生成超过 1 个敌人时,对象不是可调用对象

问题描述

我设法创建了一种方法来访问列表中的每个敌人并检测它是否被击中......我认为......除了问题。我的问题是,每次我想创建多个敌人时,我都会收到错误“敌人不是可调用对象”

老实说,我不知道这里出了什么问题。我看过其他帖子,一篇类似的帖子分享了一些关于“确保我不让我的对象=其他任何东西”的内容。但是,除了将其添加到列表的位置之外,我的对象不会在其他任何地方调用。

循环外

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个不同时存在。所以一开始,它不会再产生敌人。但是,当一个被摧毁时,会产生一个新的。

标签: python-3.xpygamecollision-detection

解决方案


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

PEP 8中有一个很好的规则——Python 代码样式指南对变量使用小写名称,对类名使用驼峰式名称(第一个大写字母)

所以你应该有

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并使代码更具可读性。


推荐阅读