pygame.error: отображение поверхности завершено после заполнения поверхности черным - PullRequest
2 голосов
/ 25 мая 2019

После того, как я покрасил поверхность в черный цвет в пигаме. Я получаю ошибку

pygame.error: display Surface quit.

Полная ошибка:

>
D:\Programme\Anaconda3\envs\gameDev\python.exe "C:/Users/xxx/PycharmProjects/Workspace/pygame snake/main.py"
pygame 1.9.6
Hello from the pygame community. https://www.pygame.org/contribute.html
Traceback (most recent call last):
  File "C:/Users/xxx/PycharmProjects/Workspace/pygame snake/main.py", line 81, in <module>
    thegame.execute()
  File "C:/Users/xxx/PycharmProjects/Workspace/pygame snake/main.py", line 74, in execute
    self.render(self._display_surf)
  File "C:/Users/xxx/PycharmProjects/Workspace/pygame snake/main.py", line 41, in render
    _display_surf.fill((0,0,0))
pygame.error: display Surface quit
<Surface(Dead Display)>

Я попробовал вместо:

_display_surf.fill((0,0,0))

с помощью:

_display_surf.fill(pygame.color("black"))

Но это тоже не сработало.

Вот мой полный исходный код:

import pygame
from pygame.locals import *


class Player(object):
    x = 10
    y = 10
    speed = 1

    def moveRight(self):
        self.x = self.x + self.speed

    def moveLeft(self):
        self.x = self.x - self.speed

    def moveUp(self):
        self.y = self.y - self.speed

    def moveDown(self):
        self.y = self.y + self.speed


class game:
    def __init__(self):
        self.resolution = (800, 500)
        self._running = True
        self._display_surf = None
        self.player = Player()

    def on_init(self):
        pygame.init()
        self._display_surf = pygame.display.set_mode(self.resolution)
        pygame.display.set_caption("Snake!")
        self._running = True

    def on_cleanup(self):
        pygame.quit()

    def render(self, _display_surf):
        print(_display_surf)
        _display_surf.fill((0,0,0))
        pygame.draw.rect(self._display_surf, (0, 128, 255), pygame.Rect(self.player.x, self.player.y, 30, 30))
        pygame.display.flip()

    def loop(self):
        pass

    def on_event(self, event):
        if event.type == pygame.quit():
            print("quiet")
            self._running = False

        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_RIGHT:
                self.player.moveRight()

            elif event.key == pygame.K_LEFT:
                self.player.moveLeft()

            elif event.key == pygame.K_UP:
                self.player.moveUp()

            elif event.key == pygame.K_DOWN:
                self.player.moveDown()

    def execute(self):
        if self.on_init() == False:
            self._running = False

        while self._running:
            for event in pygame.event.get():
                self.on_event(event)

            self.render(self._display_surf)
            self.loop()
        self.on_cleanup()


if __name__ == "__main__":
    thegame = game()
    thegame.execute()

Я ожидаю, что у меня черная поверхность и ничего не происходит. Но вместо этого он падает, когда я пытаюсь покрасить его в черный цвет. Надеюсь, кто-нибудь может помочь

Решение: Для всех, кто интересуется

вместо

        if event.type == pygame.quit():
            print("quiet")
            self._running = False

мне нужно

        if event.type == pygame.QUIT:
            print("quiet")
            self._running = False

1 Ответ

2 голосов
/ 25 мая 2019

код

 if event.type == pygame.quit():
     print("quiet")

не делает то, что вы ожидаете. pygame.quit() является вызовом функции и неинициализирует все модули Pygame. Функция возвращает None, поэтому условие не выполняется. Код запускается и вылетает при следующей инструкции, которая пытается получить доступ к модулю pygame.

Вы должны сравнить event.type с константой перечислителя событий pygame.QUIT, которая вместо этого идентифицирует событие quit :

if event.type == pygame.QUIT:
    print("quiet")
    self._running = False

См. Документацию pygame.event.

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