Pygame-Two отображает обновления одновременно с функцией pygame.time.wait () между - PullRequest
0 голосов
/ 04 декабря 2018

Я добавляю функцию 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()

1 Ответ

0 голосов
/ 04 декабря 2018

Если ваш код работает, зависит от используемого вами оконного менеджера, но, как вы заметили, это нехорошо.

Вам необходимо обдумать тот факт, что ваша игра работает в цикле, ивсе, что вы делаете для остановки цикла (например, 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...