Я хочу сделать игрока, который может стрелять пулями. Для этого я попытался определить функцию shoot
, которая вызывается при нажатии клавиши пробела. Функция выглядит следующим образом (p - объект игрока, кстати):
class bullet:
def __init__(self):
self.x = None
self.y = None
self.radius = 10
self.shooting = False
self.speed = 5
def shoot(self):
self.shooting = True
if self.shooting == True:
self.x = (p.x + 60)
self.y = (p.y + 25)
self.x += self.speed
self.y += self.speed
pygame.draw.circle(d, (0, 0, 0), (self.x, self.y), self.radius)
shoot()
Я надеялся, что функция будет продолжать вызывать себя, а пуля будет продолжать двигаться вперед. Однако, что на самом деле происходит, когда я нажимаю пробел, это дает мне ошибку
shoot()
NameError: name 'shoot' is not defined
Как я вызвал функцию:
while True:
d.fill((98, 98, 98))
p.draw()
for event in pygame.event.get():
pass
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_SPACE:
b.shoot()
Что-то, что я заметил, это то, что если я удалю рекурсию shoot()
в конце функции shoot()
, она запускается, но пуля остается в том же месте, пока пространство удерживается (как и ожидалось, поскольку рекурсия была удалена). Как я могу решить эту проблему? Спасибо