Pygame отображает переменную на экране не работает - PullRequest
0 голосов
/ 06 февраля 2019

Я использую pygame и пытаюсь отобразить переменную i, которая содержит номер цикла в моей имитации, переменная, похоже, не отображается, однако ошибки также не выдаются, и сим работает так, как будто последние 3 строки Iдобавлено, чтобы попытаться отобразить переменную там не было.Я пытался изменить цвет (мой фон черный) и положение безрезультатно.Код выглядит следующим образом:

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 голосов
/ 06 февраля 2019

Вы должны изменить порядок инструкций.Обновите отображение в конце основного цикла, после того, как текст с 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, это вызываетчто текст никогда не виден.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...