Pygameобъект не вызывается при попытке породить более 1 врага - PullRequest
1 голос
/ 04 апреля 2019

Мне удалось создать способ доступа к каждому врагу в списке и определить, был ли он поражен ... Я думаю ... Помимо проблемы. Моя проблема в том, что каждый раз, когда я хочу создать более одного врага, я получаю ошибку «Враг не вызываемый объект»

Честно говоря, я не знаю, что здесь происходит не так. Я просмотрел другие посты, и в одном подобном посте рассказывалось о том, что «я не делаю свой объект = что-то еще». Однако мой объект не вызывается нигде, кроме того, где он добавляется в список.

вне петли

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 Ответ

2 голосов
/ 05 апреля 2019

Ваша ошибка в том, что вы используете одно и то же имя для определения класса 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 и сделать код более читабельным.

...