python - pygame.error:视频系统未初始化,但我已经使用了 pygame.init()
问题描述
我检查了与我相同的错误的问题,但这是一个初始化问题。所以我确保我做了我使用 pygame.init() 的初始化,但发生了错误。我不明白这一点。所以我在下面的代码中指定了 Pycharm IDE 告诉我的位置。帮我
import pygame
import random
BLACK=(0,0,0)
pad_width=480
pad_height=640
fight_width=36
fight_height=38
enemy_width=26
enemy_height=20
def drawObject(obj,x,y):
global gamepad
gamepad.blit(obj,(x,y))
def runGame():
global gamepad,clock,fighter,enemy
x=pad_width*0.45
y=pad_height*0.9
x_change=0
enemy_x=random.randrange(0,pad_width-enemy_width)
enemy_y=0
enemy_speed=3
ongame=False
while not ongame:
for event in pygame.event.get(): #I got an error here
if event.type ==pygame.QUIT:
ongame=True
if event.type==pygame.KEYDOWN:
if event.key==pygame.K_LEFT:
x_change-=5
elif event.key==pygame.K_RIGHT:
x_change+=5
if event.type==pygame.KEYUP:
if event.key==pygame.K_LEFT or event.key==pygame.K_RIGHT:
x_change=0
gamepad.fill(BLACK)
x+=x_change
if x<0:
x=0
elif x>pad_width-fight_width:
x=pad_width-fight_width
drawObject(fighter,x,y)
enemy_y+=enemy_speed
if enemy_y>pad_height:
enemy_y=0
enemy_x=random.randrange(0,pad_width-enemy_width)
drawObject(enemy,enemy_x,enemy_y)
pygame.display.update()
clock.tick(60)
pygame.quit()
def initGame():
global gamepad,clock ,fighter,enemy
pygame.init()
gamepad=pygame.display.set_mode((pad_width,pad_height))
fighter=pygame.image.load('fighter.png')
enemy=pygame.image.load('enemy.png')
clock=pygame.time.Clock()
initGame()
runGame() #and here
解决方案
问题是pygame.quit()
使其成为while not ongame:
循环的一部分的缩进。
所以代码正确地初始化了 PyGame,但是在通过主循环的第一次迭代结束时,最终会pygame.quit()
关闭所有东西 - 使事件系统未初始化并导致您看到的错误消息。
调整缩进足以修复它:
def runGame():
global gamepad,clock,fighter,enemy
x=pad_width*0.45
y=pad_height*0.9
x_change=0
enemy_x=random.randrange(0,pad_width-enemy_width)
enemy_y=0
enemy_speed=3
ongame=False
while not ongame:
for event in pygame.event.get(): #I got an error here
if event.type ==pygame.QUIT:
ongame=True
# [ ... ]
drawObject(enemy,enemy_x,enemy_y)
pygame.display.update()
clock.tick(60)
pygame.quit() # <<-- HERE (un-indent 1 place)
因此,虽然这只是一个错字,但它也是一个足够常见的情况,需要一个完整的答案。
推荐阅读
- xml - 带有 XAML GUI 的 Powershell 在脚本结束之前不会读取数据
- java - 如何在 java/kotlin 中启动工作流程或启动操作链
- bash - 如何在具有未知变量类型的bash中进行减号操作
- python - 试图通过 python 子进程调用将 .mp3 转换为 .wav 到 ffmpeg,“没有这样的文件或目录”,尽管音频文件在同一目录中?
- python - OSError:[Errno 98] 地址已与 Gunicorn 一起使用(Dash 应用程序部署)
- python - python - 如何为python中ID标识的几种情况聚合字符串和空行?
- javascript - 根据自己变量的值条件添加聚合
- amazon-web-services - 错误:尝试 10 次后操作失败:无法连接到管理集群。获取 https://127.0.0.1:43343/api?timeout=30s: EOF
- python - 如何*仅*打印类共享变量?
- node.js - 如何使用 NodeJs Snowflake 驱动程序以异步模式执行 Snowflake 语句?