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