pygame 在屏幕上显示变量不起作用

pygame displaying variable on screen not working

我正在使用 pygame 并试图在我的模拟中显示保存周期数的变量 i,该变量似乎没有显示,但是,也没有抛出任何错误并且 sim 运行为尽管我添加的最后 3 行尝试显示变量不存在。我试图改变颜色(我的背景是黑色的)和位置无济于事。代码如下:

while running:
    try:
        i += 1

        if (exp.round_n > exp.total_rounds):
            running = False


        screen.fill((0, 0, 0, 0))
        flag = Box2DWorld.destroy([exp.objs, exp.epucks])
        #PyGameUtils.draw_contacts(screen,exp)
        PyGameUtils.draw_world(screen)
        exp.update(i, config)
        Box2DWorld.step()
        pygame.display.flip()  # Flip the screen and try to keep at the target FPS
        #clock.tick(Box2DWorld.TARGET_FPS)
        clock.tick(60)
        pygame.display.set_caption("FPS: {:6.3}{}".format(clock.get_fps(), " " * 5))
        tnr = pygame.font.SysFont('Times New Roman', 30)
        text = tnr.render(str(i), False, (255, 255, 255))
        screen.blit(text, (3,3))

您必须更改说明的顺序。在主循环结束时更新显示,在文本为 blit()screen 之后。

while running:
    try:
        i += 1

        if (exp.round_n > exp.total_rounds):
            running = False


        screen.fill((0, 0, 0, 0))
        flag = Box2DWorld.destroy([exp.objs, exp.epucks])
        #PyGameUtils.draw_contacts(screen,exp)
        PyGameUtils.draw_world(screen)
        exp.update(i, config)
        Box2DWorld.step()

        # pygame.display.flip()  # <---------- delete

        #clock.tick(Box2DWorld.TARGET_FPS)
        clock.tick(60)
        pygame.display.set_caption("FPS: {:6.3}{}".format(clock.get_fps(), " " * 5))
        tnr = pygame.font.SysFont('Times New Roman', 30)
        text = tnr.render(str(i), False, (255, 255, 255))
        screen.blit(text, (3,3))

        pygame.display.flip()  # <---------- insert

注意,在主循环开始时,显示被 screen.fill((0, 0, 0, 0)) 清除。
然后绘制一些东西,显示更新 pygame.display.flip()

但是文字是在pygame.display.flip()之后绘制的。绘制文本后发生的下一件事是在主循环开始时再次清除显示。
因此文本在渲染并绘制到 screen 表面后立即被清除,这导致文本永远不可见。