TypeError: run () отсутствует 1 обязательный позиционный аргумент: 'self' (проблема с маркером Space Invaders) - PullRequest
0 голосов
/ 04 июня 2018

я создаю космических захватчиков, таких как игра, в которой космический корабль (человеческая сторона) стреляет пулями по инопланетянам вверх.

Я пытаюсь вызвать функцию 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()
...