Pygame Text Blit和time.sleep无法正常工作

时间:2017-07-21 21:24:53

标签: python pygame

我很难在屏幕上显示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()

4 个答案:

答案 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)

当点击空格键时,文本速度会变快