pygame.time.delay () не отображает текстовое сообщение в течение необходимого времени - PullRequest
1 голос
/ 16 апреля 2020

Я пытаюсь создать экранное сообщение длиной 5 секунд каждый раз, когда пользователь нажимает «Возврат». Но программа просто делает паузу на 5 секунд и выводит сообщение на 1 миллисекунду. Это всего лишь приблизительное представление о типе кода, который я пытался использовать.

while running:
    pygame.time.delay(100)
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
    keys=pygame.key.get_pressed()
    win.fill((255,255,255))
    if keys[pygame.K_RETURN]:
        text = font.render("You pressed Return", True,(0,0,0))
        win.blit(text, (350,350))
    pygame.display.update()
    if keys[pygame.K_RETURN]:    
        pygame.time.delay(5000)

Ответы [ 2 ]

0 голосов
/ 16 апреля 2020

Вы можете попробовать использовать время и ждать 5 секунд. Также я бы не рекомендовал использовать pygame.time.delay(100) каждый кадр. Вы можете использовать часы

import time

clock = pygame.time.Clock()
Show_Text = False
Start_show_text = 0

while running:
    clock.tick(60) #this limits the fps to 60
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    keys=pygame.key.get_pressed()
    win.fill((255,255,255))

    if keys[pygame.K_RETURN]:
        Show_Text = True
        Start_show_text = time.time()

    if Show_Text:
        if time.time() - Start_show_text < 5: #if its been less than 5 seconds
            text = font.render("You pressed Return", True,(0,0,0))
            win.blit(text, (350,350))
        else:
            Show_Text = False

    pygame.display.update()
0 голосов
/ 16 апреля 2020

Вы обрабатываете события либо pygame.event.pump(), либо pygame.event.get() после pygame.display.update(). В некоторых системах обновление отображения завершается во время обработки внутренних событий. Например:

while running:
    pygame.time.delay(100)
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
    keys=pygame.key.get_pressed()
    win.fill((255,255,255))
    if keys[pygame.K_RETURN]:
        text = font.render("You pressed Return", True,(0,0,0))
        win.blit(text, (350,350))
    pygame.display.update()
    if keys[pygame.K_RETURN]:
        pygame.event.pump() # <----
        pygame.time.delay(5000)

В любом случае, я не буду так делать, потому что система не отвечает, когда приложение задерживается.
Использование pygame.time.get_ticks() чтобы нарисовать текст для промежутка времени.

Получить текущее время в миллисекундах:

current_time = pygame.time.get_ticks()

Когда нажата RETURN , затем вычислите время, когда текст чтобы исчезнуть:

if keys[pygame.K_RETURN]:
    pause_time = current_time + 5000 

Нарисуйте текст так долго text_time больше current_time:

Например:

running = True
text_time = 0
while running:
    pygame.time.delay(10)
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    current_time = pygame.time.get_ticks()
    keys = pygame.key.get_pressed()
    if keys[pygame.K_RETURN]:
        text_time = current_time + 5000

    win.fill((255,255,255))
    if text_time > current_time:
        text = font.render("You pressed Return", True,(0,0,0))
        win.blit(text, (350,350))
    pygame.display.update()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...