You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pygame开发打砖块类Pong游戏时窗口冻结无响应问题求助

故障原因
  • 核心问题就是你在两个方法里嵌套了无限while True循环:run_game本身就是游戏主循环,里面调用的_update_screen又加了一层死循环,导致程序进入_update_screen后永远无法退出,也就不会再执行事件检测逻辑。
  • Pygame要求必须持续处理系统事件队列(比如窗口关闭、输入事件等),长时间不处理事件系统就会判定程序未响应,触发窗口冻结。
  • 你当前代码还缺少_check_events方法的具体实现,即便去掉嵌套循环,没有事件处理逻辑也会导致窗口无响应。
修复方案
  1. 删除_update_screen内部的while True循环,这个方法只负责单次的画面绘制逻辑,循环调度由外层run_game的主循环负责。
  2. 补全_check_events方法,至少实现窗口关闭事件的处理逻辑。
修正后的Pong类代码
import sys
import pygame
from pongsettings import Settings
from Block import Block

class Pong:
    """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((700, 300))
        self.settings.screen_width = self.screen.get_rect().width
        self.settings.screen_height = self.screen.get_rect().height
        pygame.display.set_caption("Pong")

        self.block = Block(self)

    def _check_events(self):
        """处理所有输入事件"""
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit()

    def _update_screen(self):
        """Update images on the screen, and flip to the new screen."""
        self.screen.fill(self.settings.bg_color)
        self.block.draw_block()
        
        pygame.display.flip()

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

if __name__ == '__main__':
    # Make a game instance, and run the game.
    pg = Pong()
    pg.run_game()

内容的提问来源于stack exchange,提问作者user16774307

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 08:36:05