python - 为什么不显示“游戏结束”文字?
问题描述
我有这段代码,当我点击 时ESC,我没有看到“游戏结束”。程序等待两秒钟并关闭而不显示文本。Pygame 1.9.6
我究竟做错了什么?
run = True
while run:
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
pygame.quit()
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
lead_x_change = -block_size
lead_y_change = 0
elif event.key == pygame.K_RIGHT:
lead_x_change = block_size
lead_y_change = 0
elif event.key == pygame.K_UP:
lead_x_change = 0
lead_y_change = -block_size
elif event.key == pygame.K_DOWN:
lead_x_change = 0
lead_y_change = block_size
elif event.key == pygame.K_ESCAPE:
run = False
game_display.fill(white)
lead_x += lead_x_change
lead_y += lead_y_change
pygame.draw.rect(game_display, black, [lead_x, lead_y, width, height])
pygame.display.update()
clock.tick()
draw_text_middle("Game Over", 40, (0, 0, 0, 255), game_display)
pygame.display.update()
pygame.time.delay(2000)
pygame.quit()
解决方案
您必须pygame.quit()
从事件循环中删除调用。pygame.quit()
取消初始化所有 pygame 模块。调用此函数后,无法绘制任何内容,任何进一步调用任何 pygame 指令都会导致异常。
我建议在应用程序pygame.event.pump()
之前处理 pygame 事件.delay
。这允许 pygame 处理内部操作:
run = True
while run:
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
# pygame.quit() <---------- delete
# [...]
draw_text_middle("Game Over", 40, (0, 0, 0, 255), game_display)
pygame.display.update()
pygame.event.pump()
pygame.time.delay(2000)
pygame.quit()
推荐阅读
- reactjs - JSX 的#region
- asp.net-core - .net 3.0 中的路由 - 路由参数和操作参数
- python - 带有远程驱动器python脚本的批处理文件
- python - KMeans 和创建树状图会产生相同的标签吗?
- javascript - JS FullCalendar Day & Event 双击功能
- c++ - 算法不适用于非常量对象的 const_iterator
- hibernate - Hibernate OneToMany 关系在保存时先插入再更新,如何避免冗余更新?
- css - 在本机反应中显示等效的内联块
- c++ - 编译器在构造函数中计算的成员偏移量不正确
- json - 在 Oracle APEX 19.1 表单中插入/更新 JSON 日期失败