Using sleep(5)
or time.wait(5000)
you can't close window in this time because it doesn't check events.
You can use pygame.time.get_ticks()
to get current time and compare if it is delay to exit loop. And it doesn't stops loop.
def deathScreen():
# you can render only once
deadText = titleFont.render("You Died!", True, white)
# you can display only once
screen.fill(black)
screen.blit(deadText, (155,200))
pg.display.flip()
# calculate exit time: 5000ms = 5s
current_time = pygame.time.get_ticks()
exit_time = current_time + 5000
# - mainloop -
deathScreen = True
while deathScreen:
for event in pg.event.get():
if event.type == pg.QUIT:
quitGame()
current_time = pygame.time.get_ticks()
if current_time >= exit_time:
deathScreen = False
clock.tick(5)
# - after loop -
screen.fill(black)
pg.display.flip()
The same way you can do other things in game - ie. fire bullet every 2 seconds.
EDIT: working example
import pygame as pg
# --- constants --- (UPPER_CASE names)
WHITE = (255, 255, 255)
BLACK = ( 0, 0, 0)
RED = (255, 0, 0)
GREEN = ( 0, 255, 0)
BLUE = ( 0, 0, 255)
# --- functions --- (lower_case names)
def message(text, delay=5000, foreground=WHITE, background=BLACK):
image = font.render(text, True, foreground)
rect = image.get_rect()
rect.center = screen.get_rect().center
screen.fill(background)
screen.blit(image, rect)
pg.display.flip()
current_time = pg.time.get_ticks()
exit_time = current_time + delay
clock = pg.time.Clock()
running = True
while running:
for event in pg.event.get():
if event.type == pg.QUIT:
pg.quit()
quit()
if event.type == pg.KEYDOWN:
if event.key == pg.K_ESCAPE:
running = False
current_time = pg.time.get_ticks()
if current_time >= exit_time:
running = False
clock.tick(5)
# --- main --- (lower_case names)
pg.init()
screen = pg.display.set_mode((800, 600))
screen_rect = screen.get_rect()
font = pg.font.Font(None, 40)
message("Wait 2 seconds or press ESC", 2000, BLACK, RED)
message("You Died!", 2000)
message("Good Bye!", 2000, BLACK, GREEN)
pg.quit()
quit()