Pygame两个显示器同时更新,其间有一个Pygame.time.wait()函数



我在两次显示更新之间添加了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()

您的代码是否有效取决于您使用的窗口管理器,但正如您所注意到的,这并不好。

你需要意识到你的游戏是循环运行的,你所做的一切阻止循环的事情(比如waitsleep(都不会起作用。

在您的代码中,您有三种状态:

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()

相关内容

最新更新