微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

'pygame.error: 视频系统未初始化'

如何解决'pygame.error: 视频系统未初始化'

我的第一个游戏,更准确地说,它的初始外观(没有特别漂亮的图标、头像、背景和对象)几乎准备好了,并且完美地开始,直到我想添加一个开始菜单,在其中可以更改游戏参数,事实上,启动它的按钮“开始”。但是,经过一些更改以使菜单出现后,结果发现我在 int game() 和黑屏方面遇到了一些问题。我把之前的修改删掉了,尝试在没有菜单的情况下启动游戏,原来是这样,但是黑屏还是跟着我,我看到了这个东西:

Traceback (most recent call last):
  File "C:\Users\olive\AppData\Local\Temp\main.py\debug.py",line 40,in <module>
    keys = pygame.key.get_pressed()
pygame.error: video system not initialized

厌倦了在国外和本地论坛上寻找答案,我决定联系 stackover 的居民。我真的希望得到你的帮助。实际上,这里是代码本身(我尽可能对其进行了压缩):

Import pygame,sys

pygame.init()
pygame.font.init()

window = pygame.display.set_mode((1000,690))

screen = pygame.Surface((1000,690))

player = pygame.Surface((60,60))

zet = pygame.Surface((60,60))

arrow = pygame.Surface((20,40))

count = 0

a_x = 1000
a_y = 1000

strike = False

z_x = 0
z_y = 0

x_p = 0
y_p = 640


z_right = True


done = False

while done == False:
    for e in pygame.event.get():
        if e.type == pygame.QUIT:
            pygame.quit()
            done = True
        keys = pygame.key.get_pressed() #ошибка здесь
        if keys[pygame.K_w]:
            y_p -= 5
        if keys[pygame.K_s]:
            y_p += 5
        if keys[pygame.K_a]:
            x_p -= 5
        if keys[pygame.K_d]:
            x_p += 5 
        if e.type == pygame.KEYDOWN and e.key == pygame.K_SPACE:
            if strike == False:
                strike = True
                a_x = x_p
                a_y = y_p - 40
            if strike:
                a_y -= 1.5
                if a_y < 0:
                    strike = False
                    a_y = 1000
                    a_x = 1000

            if inter(a_x,a_y,z_x,z_y,20,40):
                count += 1
                strike = False
                a_y = 1000
                a_x = 1000

            if z_right:
                z_x += 1
                if z_x > 960:
                    z_x -=1
                z_right = False
            else:
                z_x -=1
                if z_x < 0:
                     z_x += 1
                z_right = True


    string = myfont.render('Счёт: '+str(count),(255,0))
    screen.fill((0,225,0))
    screen.blit(string,(0,430))
    screen.blit(arrow,(a_x,a_y))
    screen.blit(zet,(z_x,z_y))
    screen.blit(player,(x_p,y_p))
    window.blit(screen,0))
    pygame.display.update()

pygame.quit()
exit()

顺便说一下,我不确定我是否看过论坛上的所有问题和我能看到的答案,所以我可能错过了一些解决方案。所以,我不否认我的问题可能与本站其他人的问题相似,请勿将其视为复制粘贴或泛滥。

解决方法

这整个部分可以更改

        keys = pygame.key.get_pressed() #ошибка здесь
        if keys[pygame.K_w]:
            y_p -= 5
        if keys[pygame.K_s]:
            y_p += 5
        if keys[pygame.K_a]:
            x_p -= 5
        if keys[pygame.K_d]:
            x_p += 5 
    
    if e.type == pygame.KEYDOWN and e.key == pygame.K_SPACE:
        # some code

        if e.type == pygame.KEYDOWN:
            if e.key == pygame.K_SPACE:
                # some code
            if e.key == pygame.K_w:
                y_p -= 5
            if e.key == pygame.K_s:
                y_p += 5
            if e.key == pygame.K_a:
                x_p -= 5
            if e.key == pygame.K_d:
                x_p += 5 

您可以对代码进行大量更改

Import pygame,sys 
# to
import pygame,sys
# few variables
a_x = 1000
a_y = 1000
# to
a_x = a_y = 1000 

# next in the main loop
while done == False:
# this is not good
while not done:
# this is better practice

# and lastly
        if e.type == pygame.QUIT:
            pygame.quit()
            done = True
# you don't have to do pygame.quit inside the main loop becoz you already called it outside
pygame.quit()
exit()
# also change exit() to
sys.exit()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。