TypeError: объект 'ball' не вызывается? - PullRequest
0 голосов
/ 29 апреля 2020

Я создаю игру, в которой у меня есть пушка, которая стреляет шарами, исходящими из воздуха, поэтому я создал класс с именем ball и список с именем balls, который (очевидно) содержит шары. Каждый шар имеет значение, и каждый раз, когда он поражается снарядом, его значение уменьшается на единицу, поэтому, если значение ball.value становится равным единице, при попадании мяч удаляется из списка, и в него должен входить другой шар. Вот код для этого:

for projectile in projectiles:
    for ball in balls:
        if hypot(ball.rec.center[0]-projectile.center[0],ball.rec.center[1]-projectile.center[1] ) < ball.radius:
            if ball.value == 1:
                balls.remove(ball)
                balls.append(ball((randint(1,SCREENWIDTH - 100),10),2,0))
            else:
                ball.shrink()
            projectiles.remove(projectile)
            break

когда я делаю это, в момент, когда мяч мертв, я получаю сообщение:

TypeError: 'ball' object is not callable

, но когда я ставлю balls.append(ball((randint(1,SCREENWIDTH - 100),10),2,0)) просто после инициализации списка шаров я не получаю ошибки, но на экране просто появляется другой шар. Iая судимая изменяющий Петля с ̶ ̶f̶o̶r̶ ̶b̶a̶l̶l̶o̶o̶n̶ ̶i̶n̶ ̶b̶a̶l̶l̶s̶ ̶ увидеть, если ̶t̶h̶a̶t̶'̶s̶ проблемы, но без улучшения, ̶ ̶p̶r̶o̶b̶l̶e̶m̶.̶ * То же, 1009 *

1 Ответ

0 голосов
/ 29 апреля 2020

Команда ball(x, y) должна создать экземпляр класса ball. Но слово ball уже используется для элемента balls. Итак, просто сделайте ваш цикл for b in balls. Использование одного и того же имени для класса и экземпляра класса - действительно очень плохая идея.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...