Pygame - невозможно нарисовать изображение на экране: TypeError: draw () отсутствует 1 обязательный позиционный аргумент: 'surface' - PullRequest
0 голосов
/ 12 сентября 2018

Я хочу нарисовать прямоугольник на моем экране, однако, когда я вызываю функцию, чтобы сделать это, он говорит, что я пропускаю аргумент для "поверхности"

Как видно из кода ниже, функцияв классе.Функция содержит два параметра: «self» и «surface», и я передаю переменную «screen» вместо «surface», чтобы я мог нарисовать прямоугольник:

import pygame
import time
pygame.init()
(width, height) = (600, 400)
bg_colour = (100, 20, 156)

class infoBox(object):
    def __init__(self, surface):
        self.box = pygame.draw.rect(surface, (255,255,255),(0,400,400,100),2)

    def draw(self, surface):
        surface.blit(self.box)

screen = pygame.display.set_mode((width, height))
pygame.display.set_caption("battle EduGame")

clock = pygame.time.Clock()

pygame.display.flip()

gameRun = True


while gameRun:
    event = pygame.event.poll()
    if event.type == pygame.QUIT: #if the "x" is pressed
       pygame.quit() #quit game
       gameRun = False #break the loop.
       quit()

    screen.fill(bg_colour)

    infoBox.draw(screen)


    pygame.display.update()


    clock.tick(60)

Я сделалтакие вещи, как это было в предыдущих кодах, но здесь он не работает.

1 Ответ

0 голосов
/ 12 сентября 2018

Обратите внимание на вашу технику вызова:

class infoBox(object):

    def draw(self, surface):
        surface.blit(self.box)
...

infoBox.draw(screen)

draw - это метод экземпляра, но вы вызвали его как метод класса. Следовательно, у вас есть только один аргумент, screen. Вы не предоставили требуемый self экземпляр ... который понадобится немедленно.

Вам нужно создать объект и использовать , который , чтобы вызвать подпрограмму, что-то вроде

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