Если ваш код работает, зависит от используемого вами оконного менеджера, но, как вы заметили, это нехорошо.
Вам необходимо обдумать тот факт, что ваша игра работает в цикле, ивсе, что вы делаете для остановки цикла (например, wait
или sleep
), не будет работать.
В вашем коде есть три состояния:
1) ничего не печатать
2) напечатайте первый текст
3) напечатайте оба текста
, поэтому простой способ решения вашей проблемы - просто отслеживать текущее состояние в переменной, например:
import pygame
from sys import exit
SCREEN_WIDTH = 448
SCREEN_HEIGHT = 384
pygame.init()
screen = pygame.display.set_mode([SCREEN_WIDTH, SCREEN_HEIGHT])
my_font = pygame.font.SysFont("arial", 16)
text = my_font.render('Hello world!', True, (255,255,255))
text_pos1 = text.get_rect(center=(100, 75))
text_pos2 = text.get_rect(center=(200, 150))
state = 0
ticks = None
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
exit()
if event.type == pygame.KEYDOWN and state == 0:
state = 1
ticks = pygame.time.get_ticks()
if state == 1 and ticks and pygame.time.get_ticks() > ticks + 2000:
state = 2
screen.fill((30, 30, 30))
if state > 0: screen.blit(text, text_pos1)
if state > 1: screen.blit(text, text_pos2)
pygame.display.flip()