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

时间:2019-02-06 18:22:28

标签: python pygame simulation

我正在使用pygame并尝试显示变量i,该变量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))

1 个答案:

答案 0 :(得分:1)

您必须更改说明的顺序。在文本为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表面后立即清除该文本,这将导致该文本永远不可见。