【问题标题】:Video System not initialized error even though initialized视频系统未初始化错误,即使已初始化
【发布时间】:2018-08-05 10:49:11
【问题描述】:

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

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()

【问题讨论】:

  • run_game() 在 while 循环之后被调用,所以当 while 循环开始时 pygame 没有被初始化。只需缩进 while 循环,使其位于 run_game 函数内。 -- 这个问题很可能是重复的。

标签: python pygame init


【解决方案1】:

你已经定义了一个函数,它的主体是这个:

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 和 screen 都没有被初始化,这就是你得到初始化错误的原因。

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

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

【讨论】:

  • 为什么非常感谢你们的帮助——这解释了为什么我可能永远不会发现这一点——即使我只是在学习一个教程。关于缩进有多重要的一个很好的教训这里。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多