我在两次显示更新之间添加了一个pygame.time.wait(2000)函数,期望在按下按键后它将首先显示一个文本,然后在2秒后显示第二个文本。但最终在触发两秒钟后同时显示两个文本。我应该如何正确使用该功能来实现自己的目标?
import pygame
from pygame.locals import *
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)
textSurfaceObj1 = my_font.render('Hello world!', True, (255,255,255))
textRectObj1 = textSurfaceObj1.get_rect()
textRectObj1.center = (100, 75)
textSurfaceObj2 = my_font.render('Hello world!', True, (255,255,255))
textRectObj2 = textSurfaceObj2.get_rect()
textRectObj2.center = (200, 150)
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
exit()
if event.type == KEYDOWN:
screen.blit(textSurfaceObj1, textRectObj1)
pygame.display.flip()
pygame.time.wait(2000)
screen.blit(textSurfaceObj2, textRectObj2)
pygame.display.flip()
答案 0 :(得分:1)
如果您的代码能否正常运行取决于您所使用的窗口管理器,但是您注意到,这不好。
您需要全神贯注于您的游戏在循环中运行,并且您为停止循环所做的一切(例如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()