Pygame设置游戏循环条件后窗口无文字或立即关闭问题求助
Pygame数学问答小游戏运行异常解决方案
问题根因
- 属于Pygame开发的常见逻辑错误:文字渲染、屏幕刷新的代码放在了游戏主循环的外部。Pygame主循环是程序运行期间持续迭代执行的逻辑块,写在循环外的代码只会在主循环终止后才会运行,自然不会正常显示内容
- 变量初始值设置逻辑错误:
- 当你把
game_over初始值设为True时,while not game_over等价于while False,主循环完全不会执行,程序直接跑后面的渲染刷新代码,执行完后程序终止,所以窗口一闪而过 - 如果你硬写循环条件为
while False,主循环同样不执行,只有窗口初始化的内容显示,没有文字
- 当你把
修复方案
只需要调整两个地方:
- 把
game_over初始值改为False,让主循环可以正常运行 - 把文字渲染、屏幕刷新的代码缩进,放到主循环内部,每次循环都执行渲染刷新逻辑
修正后完整代码
# 编写Python程序实现简易数学问答游戏 # 导入依赖库 import pygame import sys import math from pygame.locals import * # 初始化pygame和字体模块 pygame.init() pygame.font.init() # 窗口参数设置 WIDTH = 600 HEIGHT = 600 background_color = (127,255,0) screen = pygame.display.set_mode((WIDTH, HEIGHT)) clock = pygame.time.Clock() pygame.display.set_caption("Math Game") # 文字参数设置 font = pygame.font.Font("freesansbold.ttf", 40) textX=10 textY=10 def show_text(x,y): text=font.render("Math Game", True, (0,0,0)) screen.blit(text,(x,y)) # 游戏主循环 game_over = False while not game_over: # 每次循环先填充背景色,避免残留画面 screen.fill(background_color) # 监听事件 for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() sys.exit() # 循环内执行文字渲染 show_text(textX, textY) # 循环内执行屏幕刷新 pygame.display.update() # 控制帧率为60,避免CPU占用过高 clock.tick(60)
内容的提问来源于stack exchange,提问作者Ivah Bmahs
相关产品推荐
相关产品推荐

