首页 > 解决方案 > 为什么不显示“游戏结束”文字?

问题描述

我有这段代码,当我点击 时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()

标签: pythonpygame

解决方案


您必须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()

推荐阅读