Почему в PyGame вообще ничего не прорисовывается?
Я начал новый проект на Python, используя pygame, и для фона я хочу, чтобы нижняя половина была заполнена серым, а верхняя - черным. Раньше я использовал прямоугольный рисунок в проектах, но почему-то кажется, что он не работает? я не знаю, что делаю не так. Самое странное, что каждый раз, когда я запускаю программу, результат меняется. иногда бывает только черный экран, а иногда серый прямоугольник покрывает часть экрана, но никогда не половину экрана.
import pygame, sys
from pygame.locals import *
pygame.init()
DISPLAY=pygame.display.set_mode((800,800))
pygame.display.set_caption("thing")
pygame.draw.rect(DISPLAY, (200,200,200), pygame.Rect(0,400,800,400))
while True:
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
Ответы
Вам нужно обновить отображение. Вы на самом деле рисуете Surfaceобъект. Если вы рисуете на поверхности, связанной с дисплеем PyGame, это не сразу видно на дисплее. Изменения становятся видимыми при обновлении дисплея с помощью pygame.display.update()или pygame.display.flip().
Смотрите pygame.display.flip():
Это обновит содержимое всего дисплея.
Пока pygame.display.flip()
обновляет содержимое всего дисплея, pygame.display.update()
позволяет обновлять только часть экрана, а не всю область. pygame.display.update()
- оптимизированная версия pygame.display.flip()
для программных дисплеев, но не работает для дисплеев с аппаратным ускорением.
Типичный цикл приложения PyGame должен:
- обрабатывать события либо, pygame.event.pump()либо pygame.event.get().
- обновлять игровые состояния и позиции объектов в зависимости от входных событий и времени (соответственно кадров)
- очистить весь дисплей или нарисовать фон
- нарисовать всю сцену (нарисовать все объекты)
- обновите отображение либо, pygame.display.update()либоpygame.display.flip()
import pygame
from pygame.locals import *
pygame.init()
DISPLAY = pygame.display.set_mode((800,800))
pygame.display.set_caption("thing")
clock = pygame.time.Clock()
run = True
while run:
clock.tick(60)
# handle events
for event in pygame.event.get():
if event.type == QUIT:
run = False
# clear display
DISPLAY.fill(0)
# draw scene
pygame.draw.rect(DISPLAY, (200,200,200), pygame.Rect(0,400,800,400))
# update display
pygame.display.flip()
pygame.quit()
exit()