я создаю космических захватчиков, таких как игра, в которой космический корабль (человеческая сторона) стреляет пулями по инопланетянам вверх.
Я пытаюсь вызвать функцию run () в моем классе пули из моегоосновной циклКаждый раз, когда я получаю эту ошибку: (TypeError: run () отсутствует 1 обязательный позиционный аргумент: 'self').Но когда я вызываю human.run (), он прекрасно работает (и прекрасно работает с alien.run (), но это вне контекста)
Это мой основной цикл, в котором я вызываю функцию run:
while not gameExit:
gameDisplay.fill(black)
human.run()
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_UP:
bullet = Bullet
bulletslist.append(bullet)
for bullet in bulletslist:
bullet.run()
pygame.display.update()
clock.tick(60)
это мой класс пули
class Bullet:
speed = 80
image = pygame.image.load('bullet.png')
def __init__(self):
self.x = human.x
self.y = human.y
def run(self):
gameDisplay.blit(Bullet.image, (self.x, self.y))
self.y -= Bullet.speed
if self.y < display_height:
bulletslist.remove(bullet)
В основном это мой человеческий класс. Я хочу, чтобы пули имели те же координаты x, y, что и человек.Примечание: я использовал здесь переменные класса только потому, что есть 1 объект, который является космическим кораблем.
class Human:
y = display_height * 0.8
x = display_width * 0.45
width = 120
speed = 0
image = pygame.image.load('human.png')
def run(self):
global gameExit
for event in pygame.event.get():
if event.type == pygame.QUIT:
gameExit = True
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
if Human.x > 0:
Human.speed = -8
else:
Human.speed = 0
elif event.key == pygame.K_RIGHT:
if Human.x < display_width - Human.width:
Human.speed = 8
else:
Human.speed = 0
if event.type == pygame.KEYUP:
if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
Human.speed = 0
gameDisplay.blit(Human.image, (Human.x, Human.y))
Human.x += Human.speed
human = Human()