视频系统未初始化错误,即使已初始化

Video System not initialized error even though initialized

我知道这个错误已经被报告过几次了,但是已经检查并且 pygame 都安装正确并且初始化正确,所以我只能猜测我的编程中有一些我没有看到的错误完全没有(过去两周……)。有人可以帮我看看为什么 运行 下面的代码会出错吗?:

import sys

import pygame

from settings import Settings

def run_game():
    # Initialize game and create a screen object.
    pygame.init()
    ai_settings = Settings()
    screen = pygame.display.set_mode((ai_settings.screen_width, ai_settings.screen_height))
    pygame.display.set_caption("Alien Invasion")


    # Start main loop for the game

while True:
    #Watch for keyboard and mouse events.
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()

        # Redraw Screen during each pass through.
        screen.fill(ai_settings.bg_color)

        # Make most recently drawn visible
        pygame.display.flip()

run_game()

您已经定义了一个函数,其函数体是这个:

def run_game():
    # Initialize game and create a screen object.
    pygame.init()
    ai_settings = Settings()
    screen = pygame.display.set_mode((ai_settings.screen_width, ai_settings.screen_height))
    pygame.display.set_caption("Alien Invasion")

然后你有一个循环是:

while True:
    #Watch for keyboard and mouse events.
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()

        # Redraw Screen during each pass through.
        screen.fill(ai_settings.bg_color)

        # Make most recently drawn visible
        pygame.display.flip()

这里的问题是上面的循环在 run_game 范围之外,它是在全局范围内定义的,所以它在 run_game() 之前执行甚至打电话。因此,pygame 和屏幕都没有被初始化,这就是为什么你会收到初始化错误的原因。

您假设调用 run_game 将初始化 pygame 并执行主循环,但它不会... python 缩进很重要。我建议您先确保了解 python 是如何解释这些行的,然后这些类型的问题就会变得非常清楚。

顺便说一句,这是一本不错的读物https://docs.python.org/3/reference/lexical_analysis.html#lexical-analysis