sleep(5)
またはtime.wait(5000)
を使用すると、イベントをチェックしないため、この時点でウィンドウを閉じることはできません。
pygame.time.get_ticks()
を使用すると、現在の時刻を取得し、ループが終了するまでに遅延があるかどうかを比較できます。そしてループを止めません。
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()
ゲームで他のことを行うのと同じ方法です。 2秒ごとに火をつける。
EDIT:実施例
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()
これはもはや私のプログラムがクラッシュしますが、テキストの最初のブロックが表示されません。 – Callum
@Callum - あなたが試して研究したことを完全に新しい質問をするべき別の問題です。もしこの答えがこの問題を解決するのに役立ったら、それを受け入れることを検討してください。 – Sayse
@実際には、テキストの最初のブロックが表示されてからこのソリューションでテキストの最初のブロックが表示されなくなってから5秒間の遅延が発生します。 – Callum