Как нарисовать объект на экране внутри класса спрайтов?

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

Вот мой основной тестовый код:

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().

Почему это и как это исправить?

Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
Четыре эффективных способа центрирования блочных элементов в CSS
Четыре эффективных способа центрирования блочных элементов в CSS
У каждого из нас бывали случаи, когда нам нужно отцентрировать блочный элемент, но мы не знаем, как это сделать. Даже если мы реализуем какой-то...
1
0
12
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

screen.fill((255, 255, 255)) заполняет весь дисплей белым цветом. Все, что было нарисовано ранее, будет потеряно. Вы должны вызвать playerGroup.update() после очистки дисплея и перед обновлением дисплея. например.:

def draw_window():
    screen.fill((255, 255, 255))
    playerGroup.update()
    playerGroup.draw(screen)
    pg.display.update()

Другие вопросы по теме