ERROR: pygame.错误:视频系统未初始化



我正在看一本python的书。到目前为止,所有的程序都有效,但现在我被困住了。我输入了这个程序,当我运行它时,我得到了这个错误。我把所有的行都检查了几遍,我想一切都是对的。它应该打开一个文本窗口,10秒后显示一个游戏角色。起初,我有一个缩进错误,但我修复了。现在我得到了这个新的错误。它启动并运行大约0.5秒,但它立即关闭并给出此错误。我在Windows 10 Pro 64位上使用Python 3.8.10,这是错误:pygame。错误:视频系统未初始化下面是代码:

import pygame
import time
import subprocess
pygame.init()
screen = pygame.display.set_mode((800, 250))
clock = pygame.time.Clock()
font = pygame.font.Font(None, 25)
pygame.time.set_timer(pygame.USEREVENT, 200)
def text_generator(text):
tmp = ""
for letter in text:
tmp += letter
if letter != " ":
yield tmp
class DynamicText(object):
def __init__(self, font, text, pos, autoreset=False):
self.done = False
self.font = font
self.text = text
self._gen = text_generator(self.text)
self.pos = pos
self.autoreset = autoreset
self.update()
def reset(self):
self._gen = text_generator(self.text)
self.done = False
self.update()
def update(self):
if not self.done:
try: self.rendered = self.font.render(next(self._gen), True, (0, 128, 0))
except StopIteration:
self.done = True
time.sleep(10)
subprocess.Popen("python C:\Users\david\Documents\pythonbook\pygame1.py 1", shell=True)
def draw(self, screen):
screen.blit(self.rendered, self.pos)
text=("Steve has gone on a quest to defeat the Ender Dragon. Will he make it?")
message = DynamicText(font, text, (65, 120), autoreset=True)
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT: break
if event.type == pygame.USEREVENT: message.update()
else:
screen.fill(pygame.color.Color('black'))
message.draw(screen)
pygame.display.flip()
clock.tick(60)
continue
break
pygame.quit()

我怎么知道错误信息是什么意思?或者有人知道吗?

pygame.quit()的每一帧中退出游戏。退出游戏后的应用程序循环,而不是在应用程序循环。另外,为什么你只在else情况下更新游戏?在event.type == pygame.QUIT的情况下,break语句只中断事件循环,而不中断应用程序循环。更改代码的控制流:

# application loop
run = True
while run:
# event loop
for event in pygame.event.get():
if event.type == pygame.QUIT: run = False
if event.type == pygame.USEREVENT: message.update()

# redraw in every frame
screen.fill(pygame.color.Color('black'))
message.draw(screen)
pygame.display.flip()
clock.tick(60)
# quit after the application loop
pygame.quit()

最新更新