【问题标题】:pygame.error:video system not initialized but I already used pygame.init()pygame.error:视频系统未初始化,但我已经使用了 pygame.init()
【发布时间】:2021-05-04 19:09:50
【问题描述】:

我检查了与我相同的错误,但这是一个初始化问题。所以我确定我做了初始化 我使用了 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

【问题讨论】:

标签: python python-3.x pygame init


【解决方案1】:

问题是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)

因此,虽然它只是一个错字,但它也是一个足够常见的情况,需要一个完整的答案。

【讨论】:

  • 哇,我解决不了,但是已经解决了,谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多