如何在精灵 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()
所以我尝试使用 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()