如何用pygame draw()在组中仅绘制特定的精灵?

5 投票
2 回答
15128 浏览
提问于 2025-04-17 22:00
<Group(4 sprites)>

我有4个精灵在一个组里,它们都准备好用线条绘制了。

stuff_to_draw.draw(screen)

它们现在是同时绘制的。

有没有可能做到像这样呢?

stuff_to_draw[0].draw(screen)

我查看了pygame组的文档,但找不到关于如何选择组中特定元素的有用信息。

我想实现什么呢?

这个精灵组里有一个答案精灵,它包含一个位置(x,y)和一个要绘制的字母图像。

目前在所有地图上,答案都是绘制的,而不是在当前的问题上。所以我想能够在问题一时绘制stuff_to_draw[0],然后在问题二时绘制stuff_to_draw[1]

2 个回答

2

你可以单独绘制任何一个精灵,但我不太建议这样做。这样做的方式是:

sprite = stuff_to_draw.sprites()[0]
screen.blit(sprite.image, sprite.rect)

我建议把你想要在某个时刻绘制的精灵放在一个精灵组里,把其他的放在一个单独的列表或组里。

4

首先,给你每个精灵(sprite)添加一个 self.type 属性。给它一个值,比如 self.type = 1。然后在你想绘制某个精灵或一组精灵的时候调用这个属性:

for sprite in group: #Replace group with your sprite group
    if sprite.type == 1: #Or whatever type you want
        sprite.draw(screen)
    elif sprite.type == 2:
        sprite.draw(screen)
    #Etc...

接下来,在你的 sprite 类中,确保你是从 pygame.sprite.Sprite 这个类继承的:

class my_sprite_class(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__()
        #Etc...

    #Add this draw function so we can draw individual sprites
    def draw(self, screen):
        screen.blit(self.image, self.rect)

我忘了单个精灵是没有绘制功能的,只有组才有。@pmoleri @jackdh 我错了

请查看这个 帖子,了解一下这个类能做些什么。

如果你还有其他问题,欢迎在下面评论。

撰写回答