pygame.error:视频系统未初始化
问题描述:
当我尝试存在游戏时,我似乎无法摆脱此错误。游戏运行良好,但只有在尝试存在游戏时才会出现错误。pygame.error:视频系统未初始化
import pygame
from pygame import *
import random
import time
import os
import sys
from pygame.locals import *
black = (0,0,0)
white = (255,255,255)
pygame.init()
def game():
os.environ['SDL_VIDEO_CENTERED'] = '1'
mouse.set_visible(False)
#screen
screen_width = 800
screen_height = 500
screen = pygame.display.set_mode([screen_width,screen_height])
#load images etc.
backdrop = pygame.image.load('bg.jpg').convert_alpha()
menu = pygame.image.load('green.jpg').convert_alpha()
ballpic = pygame.image.load('ball.gif').convert_alpha()
mouseball = pygame.image.load('mouseball.gif').convert_alpha()
display.set_caption('Twerk')
back = pygame.Surface(screen.get_size())
def text(text,x_pos,color,font2=28):
tfont = pygame.font.Font(None, font2)
text=tfont.render(text, True, color)
textpos = text.get_rect(centerx=back.get_width()/2)
textpos.top = x_pos
screen.blit(text, textpos)
start = False
repeat = False
while start == False:
for event in pygame.event.get():
if event.type == pygame.QUIT:
start = True
#falling = True
#finish = True
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_SPACE:
start = True
#game over screen
screen.blit(menu,[0,0])
pygame.display.set_caption("TWERK")
#Text
#"Welcome to Escape"
#needs replacing with logo
text("Twerk",60,white,300)
#"Instructions"
text("Instructions",310,white)
text("----------------------------------------------------------------------------------------",320,white)
text("Avoid the the enemies",340,white)
text("Last as long as you can!",360,white)
text("Press space to start",420,white)
pygame.display.flip()
while start == True:
positionx=[]
positiony=[]
positionxmove=[]
positionymove=[]
falling = False
finish = False
score=0
enemies=4
velocity=1
for i in range(enemies):
positionx.append(random.randint(300,400)+random.randint(-300,200))
positiony.append(random.randint(200,340)+random.randint(-200,100))
positionxmove.append(random.randint(1,velocity))
positionymove.append(random.randint(1,velocity))
font = pygame.font.Font(None, 28)
text = font.render('Starting Twerk... ', True, (100,100,100))
textRect = text.get_rect()
textRect.centerx = screen.get_rect().centerx
textRect.centery = screen.get_rect().centery
screen.blit(backdrop, (0,0))
screen.blit(text, textRect)
pygame.display.update()
game=time.localtime()
while start == True:
end=time.localtime()
score= (end[1]-game[1])*3600 + (end[4]-game[4])*60 + end[5]-game[5]
if score > 1: break
first=True
strtTime=time.localtime()
while not finish or falling:
screen.blit(backdrop, (0,0))
for i in range(enemies):
screen.blit(ballpic,(positionx[i],positiony[i]))
(mousex,mousey)=mouse.get_pos()
screen.blit(mouseball,(mousex,mousey))
display.update()
strt = time.localtime()
if first:
while True:
end=time.localtime()
score= (end[3]-strt[3])*3600 + (end[4]-strt[4])*60 + end[5]-strt[5]
if score > 3: break
first = False
if falling:
for i in range(enemies):
positionymove[i]=1000
positionxmove[i]=0
for i in range(enemies): positionx[i]=positionx[i]+positionxmove[i]
for i in range(enemies): positiony[i]=min(600,positiony[i]+positionymove[i])
if falling:
falling=False
for posy in positiony:
if posy<600: falling=True
if not falling:
for i in range(enemies):
for j in range(i+1,enemies):
if abs(positionx[i]-positionx[j])<20 and abs(positiony[i]-positiony[j])<20:
temp=positionxmove[i]
positionxmove[i]=positionxmove[j]
positionxmove[j]=temp
temp=positionymove[i]
positionymove[i]=positionymove[j]
positionymove[j]=temp
for i in range(enemies):
if positionx[i]>600: positionxmove[i]*=-1
if positionx[i]<0: positionxmove[i]*=-1
if positiony[i]>440: positionymove[i]*=-1
if positiony[i]<0: positionymove[i]*=-1
for i in range(enemies):
if abs(positionx[i]-mousex)<40 and abs(positiony[i]-mousey)<40:
falling = True
finish = True
#start = False
endTime=time.localtime()
score= (endTime[3]-strtTime[3])*3600 + (endTime[4]-strtTime[4])*60 + endTime[5]-strtTime[5]
break
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_ESCAPE:
pygame.quit()
game()
这是我得到的错误,我已将quit()更改为QUIT,但仍然没有运气。
Traceback (most recent call last):
File "C:\Users\MO\Desktop\Twerk\ballbounce_changed.py", line 171, in <module>
game()
File "C:\Users\MO\Desktop\Twerk\ballbounce_changed.py", line 160, in game
for event in pygame.event.get():
pygame.error: video system not initialized
谢谢:)
答
当你想退出游戏,您应该停止主循环。
我的建议,无论是的
- 通话
exit()
pygame.quit()
后 - 设置
finish = True
和start = False
(虽然由于与粘贴的一些代码缩进问题,这是不可能告诉,这将实际工作)
只有当您要终止您的Python会话时,才应该调用pygame.quit()
。
我的建议:如果您想多次拨打game()
,例如在交互式会话中,您应该删除game()
中pygame.quit()
的呼叫。这个函数不会初始化pygame,当然所有尝试调用它的功能都会失败。
答
我认为这是因为你手动调用了pygame.quit()。当脚本结束时,Pygame会自动退出。
仔细检查pygame的工作,你可以运行这个样板:http://ninmonkey.googlecode.com/hg/boilerplate/pygame/1.%20blank%20screen/1%20-%20basic.%20pygame%20--nocomments.py
当你想退出,设置完成=真。 (见上面例子中的第37行和第64行。)
答
你调用了pygame.quit(),但我认为你还需要调用sys.exit()。
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
这就是我在我所有的游戏中所做的。
回溯(最近通话最后一个): 文件 “C:\用户\ MO \桌面\ Twerk \ ballbounce_changed.py”,线路180,在 游戏() 文件“C:\用户\ MO \桌面\ Twerk \ ballbounce_changed.py“,行109,在游戏 screen.blit(背景,(0,0)) pygame.error:显示表面退出 >>> –
ErHunt
2012-04-21 20:45:36
@mooeeeep,我现在改变了缩进当我尝试存在时得到上述错误,它确实存在。 – ErHunt 2012-04-21 20:46:32
@Badr我看不到任何缩进的变化。你应该把你的代码分成更多的功能。这会使代码更具可读性,并在失败时向Traceback添加信息。 – moooeeeep 2012-04-21 20:53:28