我很难在屏幕上显示pygame
文字。在退出之前我只想让消息显示2秒钟,然后让游戏退出。为此,我使用time.sleep(2)
。但是,我相信其他大多数人都没有从我在Stackoverflow上查到的问题中得到这个问题,文本只是在窗口关闭前的最后一刻才出现。而是按下关闭按钮后屏幕保持白色。我的代码如下。请注意,不是this question的副本。
import pygame
import time
pygame.init()
white = (255,255,255)
black = (0,0,0)
red = (255,0,0)
display_width = 800
display_height = 600
gameDisplay = pygame.display.set_mode((display_width,display_height))
clock = pygame.time.Clock()
FPS = 30
font = pygame.font.SysFont(None, 25)
x = False
while not x:
for event in pygame.event.get():
if event.type == pygame.QUIT:
x = True
gameDisplay.fill(white)
pygame.display.update()
clock.tick(FPS)
screen_text = font.render('Test', True, red)
gameDisplay.blit(screen_text, (0, 0))
pygame.display.update()
time.sleep(2)
pygame.quit()
答案 0 :(得分:0)
您可以尝试用
替换time.sleep(2)
for i in range(0, 200, 1):
time.sleep(0.01)
如果您希望能够使用CTRL-C来停止程序,这在长睡眠的其他情况下非常有用。使用函数也可能更方便:
def MySleep(duration, resolution=10):
"""Sleep, without freezing the program. All values in ms"""
for i in range(0, int(duration), int(resolution)):
time.sleep(resolution / 1000)
答案 1 :(得分:0)
我最终使用了提到的pygame.time.set_timer
解决方法@CodeSurgeon。
这对我有用 - 用time.sleep(2)
代替:
pygame.time.set_timer(pygame.USEREVENT, 2000)
should_quit = False
while not should_quit:
for event in pygame.event.get():
if event.type == pygame.USEREVENT:
should_quit = True
答案 2 :(得分:0)
我实际上有完全相同的问题,发现如果我在pygame.quit()之后直接移动time.sleep(2),它会按预期工作。我是pygame的新手,不知道为什么会这样
>>> is_valid_angle("85.3d")
True
>>> is_valid_angle("85.3.7D")
False
>>> is_valid_angle("90d")
False
>>> is_valid_angle("0.001r")
True
>>> is_valid_angle("1.5R")
True
答案 3 :(得分:0)
出于某种原因,stdlib time.sleep() 在 pygame 中不起作用。 但是,pygame 确实有自己的时间功能。 这是我编写的用于逐个字符打印消息的代码。
message = ""
font = pygame.font.Font("freesansbold.ttf", 32)
message_text_x = 0
message_text_y = 550
message_text_speed = 35
inF = open("chapter_1.txt")
lines = inF.readlines()
def write_message(char, x, y):
# first render the value as text so it can be drawn on the screen using screen.blit
message_text = font.render(char, True, (0, 0, 0))
screen.blit(message_text, (x, y))
running = True
while running:
for line in lines:
for char in line:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_q:
running = False
if event.key == pygame.K_SPACE:
message_text_speed = 10
message += char
write_message(message, message_text_x, message_text_y)
pygame.event.pump()
pygame.time.delay(message_text_speed)
pygame.display.update()
clock.tick(60)
当点击空格键时,文本速度会变快