Чтобы применить ООП на практике, я создал свой собственный класс Window, который наследуется от pygame.Surface, и добавляет функциональность. Согласно источнику , следующему за , это то, что я должен сделать:
class MyWindow(pygame.Surface):
def __init__(self, w, h):
pygame.Surface.__init__(self, size=(w, h))
self.screens: list[Screen] = [] # For example
Я пробовал следующий код, и он, кажется, работает нормально, до точки, где display.update()
называется. Это выдает pygame.error
.
myWin: MyWindow = MyWindow(200, 200)
print(myWin) # This correctly prints: <Surface(200x200x32 SW)>
pygame.draw.rect(myWin, (255, 255, 255), (90, 90, 20, 20))
pygame.display.update()
pygame.time.delay(1000)
Этот код даже не создает фактическое окно. Напротив, следующий код работает просто отлично, вместо этого полагаясь на функцию display.set_mode()
для инициализации Surface.
pyWin: pygame.Surface = pygame.display.set_mode((200, 200))
pygame.draw.rect(pyWin, (255, 255, 255), (90, 90, 20, 20))
pygame.display.update() # Actually shows the square
pygame.time.delay(1000)
![The desired output](https://i.stack.imgur.com/EgMPi.png)
Ясно display.set_mode()
делает то, что Surface.__init__()
не делает.
TL; DR: Как я могу инициализировать объект, наследуемый от Surface
, таким образом, чтобы он действительно отображал и обновлял окно?
Спасибо!