pygame.error错误:填充曲面b后显示曲面退出

2024-04-20 03:39:23 发布

您现在位置:Python中文网/ 问答频道 /正文

在我把我的表面涂成黑色之后。我得到了错误

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

Tags: selfeventfalseifmainondefdisplay
1条回答
网友
1楼 · 发布于 2024-04-20 03:39:23

代码

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

不会做你想做的事。^{}是一个函数调用,取消所有pygame模块的初始化。函数返回None,因此条件失败。代码在下一条试图访问pygame模块的指令中运行并崩溃。你知道吗

您必须将event.type与事件枚举器常量pygame.QUIT进行比较,后者标识退出事件:

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

参见^{}的文档。你知道吗

相关问题 更多 >