【问题标题】:I keep getting this error "pygame.error: display Surface quit" and dont know what to do [duplicate]我不断收到此错误“pygame.error:显示 Surface 退出”并且不知道该怎么做[重复]
【发布时间】:2020-07-14 03:42:50
【问题描述】:

我是 python 的初学者,只是为了学习它,并且一直在看教程,特别是 Tech w Tim。我正在学习教程并收到错误“pygame.error: display Surface quit”。我尝试遵循其他类似问题中的一些提示,但无法让它们发挥作用。

这里是代码。

import pygame

width = 500
height = 500
win = pygame.display.set_mode((width, height))
pygame.display.set_caption("Client")

clientNumber = 0

class Player():
    def __init__(self, x, y, width, height, color):
        self.x = x
        self.y = y
        self.width = width
        self.height = height
        self.color = color
        self.rect = (x, y, width, height)
        self.vel = 3

    def draw(self, win):
        pygame.draw.rect(win, self.color, self.rect)

    def move(self):
        keys = pygame.key.get_pressed()

        if keys[pygame.K_LEFT]:
            self.x -= self.vel

        if keys[pygame.K_RIGHT]:
            self.x += self.vel

        if keys[pygame.K_UP]:
            self.y -= self.vel

        if keys[pygame.K_DOWN]:
            self.y += self.vel

        self.rect = (self.x, self.y, self.width, self.height)

def redrawWindow(win, player):
    win.fill((255,255,255))
    player.draw(win)
    pygame.display.update()

def main():
    run = True
    p = Player(50, 50, 100, 100, (0, 255, 0))
    clock = pygame.time.Clock()

    while run:
        clock.tick(60)
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                run = False
                pygame.quit()

        p.move
        redrawWindow(win, p)

main()

这也是我在终端中得到的

Traceback (most recent call last):
  File "c:/Users/Owen/Documents/Oof/Client.py", line 60, in <module>
    main()
  File "c:/Users/Owen/Documents/Oof/Client.py", line 58, in main    
    redrawWindow(win, p)
  File "c:/Users/Owen/Documents/Oof/Client.py", line 41, in redrawWindow
    win.fill((255,255,255))
pygame.error: display Surface quit

【问题讨论】:

    标签: python pygame


    【解决方案1】:

    pygame.quit()被执行时,所有的PyGame模块都会被卸载。对 PyGame 函数的每次进一步调用都会引发异常。
    您在循环中间调用pygame.quit (),但由于循环执行一次到结束,您将在以下 PyGame API 调用中获得异常。
    不要在事件循环中调用pygame.quit(),而是在应用循环之后调用一次:

    def main():
        # [...]
        
        while run:
            clock.tick(60)
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    run = False
                    # pygame.quit() <----- delete
    
            p.move
            redrawWindow(win, p)
    
        pygame.quit() # <----- insert
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-11
      • 1970-01-01
      • 2022-12-07
      • 2021-12-10
      相关资源
      最近更新 更多