Pygame: дисплей не обновляется до задержки - PullRequest
0 голосов
/ 14 февраля 2019

У меня есть ошибка в программе, которую я пишу, когда я сначала звоню:

pygame.display.update()

Затем я звоню:

pygame.time.wait(5000)

Я хочу, чтобы программа обновила дисплей, а затемподождите некоторое время, прежде чем продолжить.Однако по какой-то причине дисплей обновляется только после времени ожидания, а не раньше.

Я приложил некоторый пример кода, чтобы продемонстрировать, что происходит:

import pygame
pygame.init()

white = (255,255,255)
black = (0,0,0)
green = (0,255,0)

screenSize = screenWidth, screenHeight = 200, 200
screen = pygame.display.set_mode(screenSize)
screen.fill(white)

pygame.draw.rect(screen, black,((50,50),(50,50)))
pygame.display.update()
pygame.time.wait(5000)

pygame.quit()
raise SystemExit

Это должно создать белое окно счерный ящик, затем подождите 5 секунд и затем выйдите.

Однако на самом деле он создает окно, подождите 5 секунд, затем на долю секунды появится окно, а затем оно немедленно закроется.

Кто-нибудь знает, как решить эту проблему?

1 Ответ

0 голосов
/ 14 февраля 2019

Содержимое вашего окна будет отрисовано, только если ваш оконный менеджер скажет вашему окну что-то нарисовать.То есть, если ваш код работает, зависит от вашего оконного менеджера.

Чтобы заставить его работать, вам нужно разрешить pygame обрабатывать все события, и вы обычно делаете это, вызывая pygame.event.get().

Кроме того, вам следует избегать вызова блокирующих функций, таких как pygame.time.wait(), поскольку, пока они блокируются, вы не можете обрабатывать события или позволять pygame обрабатывать системные события.Это означает, что pygame не будет перекрашивать окно, и вы не сможете закрыть окно.

Подумайте над тем, чтобы изменить код:

import pygame
pygame.init()

white = (255,255,255)
black = (0,0,0)
green = (0,255,0)

screenSize = screenWidth, screenHeight = 200, 200
screen = pygame.display.set_mode(screenSize)
screen.fill(white)

pygame.draw.rect(screen, black,((50,50),(50,50)))

run = True
clock = pygame.time.Clock()
dt = 0
while run:
    dt += clock.tick()
    for e in pygame.event.get():
        if e.type == pygame.QUIT:
            run = False
    if dt >= 5000:
        run = False
    pygame.display.update()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...