运行显示问题并接收用户输入的函数时pygame为何崩溃?
错误原因排查
- 未调用显示更新接口:修改screen画布内容后没有执行
pg.display.update()(或pg.display.flip()),所有绘制操作仅存在于缓存中,窗口会一直显示黑屏 - 死循环无法退出:键盘事件判断中使用的
break只会跳出当前遍历事件的for循环,无法跳出外层的while 1死循环,程序长时间卡顿会被系统判定为无响应崩溃 - Pygame的
font.render原生不支持\n换行符:代码中写的换行符不会被识别渲染,整段文字会显示为单行,后半段可能超出渲染范围不可见 - 未处理窗口关闭事件:没有监听
QUIT类型事件,用户点击窗口关闭按钮时程序会直接无响应崩溃
修复后代码
def pick_board(): global bo, bo1, bo2 while True: # 拆分两行渲染文本,解决不支持换行的问题 question_line1 = font.render('你想要解哪一个数独盘?', True, pg.Color('black')) question_line2 = font.render('输入1或2选择:', True, pg.Color('black')) screen.fill('white') screen.blit(question_line1, (20, 20)) screen.blit(question_line2, (20, 60)) # 第二行向下偏移避免文字重叠 # 新增画布更新操作 pg.display.update() for event in pg.event.get(): # 新增窗口关闭事件处理逻辑 if event.type == pg.QUIT: pg.quit() exit() if event.type == pg.KEYDOWN: if event.key == pg.K_1: bo = bo1 # 直接return跳出整个函数,替代break跳出循环 return if event.key == pg.K_2: bo = bo2 return
内容的提问来源于stack exchange,提问作者Jack Meakin
相关产品推荐
相关产品推荐

