如何使用精灵组pygame的(How to use sprite groups in pygame)

2019-07-05 02:54发布

所以,我已经得到了我在程序的地步,我需要创建一些精灵玩家可以与碰撞一组无死亡(像其他一些精灵我可能会在屏幕上)。

我已经冲刷谷歌,但它似乎是官方的pygame的文档是无用的和/或很难理解。 我正在寻找任何人谁知道一点关于这个的帮助只是一丁点儿。

首先,我需要找出如何创建一个组。 它是否在最初的游戏设定去?

然后创建以后,其加入了精灵一组。 Pygame的网站中有这样一段关于这个问题说:

Sprite.add(*groups)

所以...一个人如何使用它? 比方说,我有一个精灵命名的宝石。 我需要的宝石增加宝石集团。 是吗:

gem = Sprite.add(gems)

我对此表示怀疑,但没有任何例子熄灭的网站上,我很茫然。

此外,我希望能够为某一组编辑属性。 这是通过定义像我一个小组将一个类来完成? 或者是它的东西我定义的定义为现有的精灵之内,但有一个“如果精灵组”?

Answer 1:

要回答你的第一个问题; 创建一个组,你会做这样的事情:

gems = pygame.sprite.Group()

然后添加一个精灵:

gems.add(gem)

至于你想编辑该组的属性取决于它们是什么。 例如,你可以定义这样的指示组的方向:

gems.direction = 'up'


Answer 2:

我知道这个问题已经回答了,但最好的方法是像kelwinfc建议什么。 我会阐述所以它更容易理解。

# First, create you group
gems = pygame.sprite.Group()

class Jewel (pygame.sprite.Sprite): # Inherit from the Sprite
    def __init__ (self, *args): # Call the constructor with whatever arguments...
        # This next part is key. You call the super constructor, and pass in the 
        # group you've created and it is automatically added to the group every 
        # time you create an instance of this class
        pygame.sprite.Sprite.__init__(self, gems) 

        # rest of class stuff after this.

>>> ruby = Jewel()  
>>> diamond = Jewel()  
>>> coal = Jewel()

# All three are now in the group gems. 
>>> gems.sprites()
[<Jewel sprite(in 1 groups)>, <Jewel sprite(in 1 groups)>, <Jewel sprite(in 1 groups)>]

您还可以添加更多的gems.add(some_sprite)和同样与删除它们gems.remove(some_sprite)



Answer 3:

只需调用超__init__与组的列表功能。 例如:

def __init__(self):
    pygame.sprite.Sprite.__init__(self, self.groups)

然后,在每一类层次结构的,你应该定义一个属性self.groups和超级构造函数将增加每个实例其组的工作。 这是我认为最干净的解决方案。 否则,只是群体中的每个类列表中调用父类的构造函数明确。



Answer 4:

但更方便,你可以直接通过精灵上的构造器:

gems = pygame.sprite.Group(gem1, gem2)


文章来源: How to use sprite groups in pygame