Итак, я пытаюсь нарисовать прямоугольник с другим прямоугольником сверху, используя спрайты. Я сделал класс для плеера и сделал некоторые базовые настройки, но когда я попытался засветить второй прямоугольник сверху, это не сработало. Я провел небольшое тестирование и обнаружил, что не могу даже рисовать линии или прямоугольники внутри этого класса игрока.
Вот мой основной тестовый код:
import pygame as pg
pg.init()
width, height = 800, 800
screen = pg.display.set_mode((width, height))
run = True
class Player(pg.sprite.Sprite):
def __init__(self):
super().__init__()
self.image = pg.image.load("test_image.png")
self.rect = self.image.get_rect()
def update(self):
pg.draw.rect(screen, [0, 255, 0], (200, 200, 100, 50))
print("test")
def draw_window():
screen.fill((255, 255, 255))
playerGroup.draw(screen)
pg.display.update()
playerGroup = pg.sprite.GroupSingle()
playerGroup.add(Player())
while run:
for event in pg.event.get():
if event.type == pg.QUIT:
run = False
playerGroup.update()
draw_window()
Вот что я получаю: изображение
Синяя вещь — это изображение игрока, которое обычно рисуется в верхнем левом углу. Однако прямоугольник, который я пытаюсь нарисовать внутри метода update(), нигде не виден, хотя я ясно вижу, что метод вызывается с помощью print("test"). Это верно не только для pg.draw(), но и для surface.blit().
Почему это и как это исправить?
screen.fill((255, 255, 255))
заполняет весь дисплей белым цветом. Все, что было нарисовано ранее, будет потеряно. Вы должны вызвать playerGroup.update()
после очистки дисплея и перед обновлением дисплея. например.:
def draw_window():
screen.fill((255, 255, 255))
playerGroup.update()
playerGroup.draw(screen)
pg.display.update()