Python 当试图渲染到窗口时,PyGame异常和冻结

Python 当试图渲染到窗口时,PyGame异常和冻结,python,pygame,Python,Pygame,有人能告诉我这个Python代码出了什么问题吗?我正在使用Python 3.8.2 这段代码来自《Python速成课程,第二版:基于项目的编程入门》一书。原始代码使用pygame.display.flip()而不是pygame.display.update(),原始代码将生成以下错误代码:pygame.error:窗口曲面无效,请调用SDL\u GetWindowsSurface()获取新曲面 然而,在我将其更改为pygame.display.update()后,它只是用空白的pygame窗口冻

有人能告诉我这个Python代码出了什么问题吗?我正在使用Python 3.8.2

这段代码来自《Python速成课程,第二版:基于项目的编程入门》一书。原始代码使用
pygame.display.flip()
而不是
pygame.display.update()
,原始代码将生成以下错误代码:
pygame.error:窗口曲面无效,请调用SDL\u GetWindowsSurface()获取新曲面

然而,在我将其更改为
pygame.display.update()
后,它只是用空白的pygame窗口冻结了我的电脑

import pygame

from settings import Settings
from ship import Ship

class AlienInvasion:
    """ overall class to manage game assets and behavior."""

    def __init__(self):
        """Initialize the game, and create game resources."""
        pygame.init()
        self.settings = Settings()

        self.screen = pygame.display.set_mode((0, 0), pygame.FULLSCREEN)
        self.settings.screen_width = self.screen.get_rect().width
        self.settings.screen_height = self.screen.get_rect().height
        pygame.display.set_caption("Alien Invasion")

        self.ship = Ship(self)

    def run_game(self):
        """Start the main loop for the game."""
        while True:
            self._check_events()
            self.ship.update()
            self._update_screen()

    def _check_events(self):
        """respond to keyboard and mouse events."""
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                sys.exit()
            elif event.type == pygame.KEYDOWN:
                self._check_keydown_events(event)
            elif event.type == pygame.KEYUP:
                self._check_keyup_events(event)
            elif event.type == pygame.K_q:
                sys.exit()

    def _check_keydown_events(self, event):
        """Respond to keypresses."""
        if event.key == pygame.K_RIGHT:
            self.ship.moving_right = True
        if event.key == pygame.K_LEFT:
            self.ship.moving_left = True
        if event.key == pygame.K_UP:
            self.ship.moving_up = True
        if event.key == pygame.K_DOWN:
            self.ship.moving_down = True

    def _check_keyup_events(self, event):
        """Respond to key releases."""
        if event.key == pygame.K_RIGHT:
            self.ship.moving_right = False
        if event.key == pygame.K_LEFT:
            self.ship.moving_left = False
        if event.key == pygame.K_UP:
            self.ship.moving_up = False
        if event.key == pygame.K_DOWN:
            self.ship.moving_down = False

    def _update_screen(self):
        """Update images on the screen, and flip to the new screen."""
        self.screen.fill(self.settings.bg_color)
        self.ship.blitme()

        pygame.display.update()

if __name__ == '__main__':
    #make a game instance, and run the game.
    ai = AlienInvasion()
    ai.run_game()

你输入的程序不正确。我在上找到了整本书的源代码,这个特别的例子是

你的程序也以同样的方式为我运行——我也得到了一个空白的冻结屏幕。如上所示,您的程序正在忽略
pygame.K\u q
按键,因为您在
\u check\u events()
函数中输入了该行代码,而不是
\u check\u keydown\u events()
。这就是为什么你的电脑好像被冻结了


作者在github上的源代码(链接在上面)对我来说运行良好。我建议您下载或复制/粘贴该代码,而不是手动键入。

您键入的程序不正确。我在上找到了整本书的源代码,这个特别的例子是

你的程序也以同样的方式为我运行——我也得到了一个空白的冻结屏幕。如上所示,您的程序正在忽略
pygame.K\u q
按键,因为您在
\u check\u events()
函数中输入了该行代码,而不是
\u check\u keydown\u events()
。这就是为什么你的电脑好像被冻结了


作者在github上的源代码(链接在上面)对我来说运行良好。我建议您下载或复制/粘贴该代码,而不是手动键入。

pygame可能有用pygame可能有用我复制了整个代码并运行它。但是它仍然不起作用,出现了相同的错误代码:pygame.error:Window surface无效,请调用SDL_getWindowsSurface()以获取新的surface顺便说一句,如果我不使用pygame.fullscreen,代码可以正常工作。我有Python版本3.6.9和pygame版本1.9.6。您可以通过命令
python--version
pip show pygame
了解您拥有的功能。我有pygame 2.0.0.dev6、SDL 2.0.10、python 3.8.2,您可能在pygame中发现了一个bug。我从阅读中注意到,有一个示例程序可以用来复制和报告错误:
$python-m pygame.examples.异形
f
键切换全屏模式。如果这复制了bug,那么您可以提交bug报告。我复制了整个代码并运行了它。但是它仍然不起作用,出现了相同的错误代码:pygame.error:Window surface无效,请调用SDL_getWindowsSurface()以获取新的surface顺便说一句,如果我不使用pygame.fullscreen,代码可以正常工作。我有Python版本3.6.9和pygame版本1.9.6。您可以通过命令
python--version
pip show pygame
了解您拥有的功能。我有pygame 2.0.0.dev6、SDL 2.0.10、python 3.8.2,您可能在pygame中发现了一个bug。我从阅读中注意到,有一个示例程序可以用来复制和报告错误:
$python-m pygame.examples.异形
f
键切换全屏模式。如果这复制了错误,那么您可以提交错误报告。