如何在精灵 class 内的屏幕上绘制对象?

How do I draw an object on the screen inside of a sprite class?

所以我尝试使用 Sprites 绘制一个矩形,顶部还有另一个矩形。我为播放器制作了一个 class 并做了一些基本设置,但是当我试图在顶部复制第二个矩形时,它不起作用。我做了一些测试,发现我什至无法从这个播放器内部绘制线条或矩形 class。

这是我的基本测试代码:

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

这是我得到的:image

蓝色的是左上角正常绘制的球员形象。然而,我试图在 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()