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

