9

所以我在我的程序中已经到了需要为一些玩家可以碰撞而不会死亡的精灵创建一个组(就像我在屏幕上可能有的其他精灵一样)。

我搜索了谷歌,但似乎官方的 pygame 文档没有用和/或难以理解。我正在寻找任何对此有所了解的人的帮助。

首先,我需要了解如何创建群组。它会进入初始游戏设置吗?

然后在创建组时将精灵添加到组中。pygame 网站在这个问题上有这样的说法:

Sprite.add(*groups)

那么......如何使用它?假设我有一个名为 gem 的精灵。我需要将 gem 添加到 gems 组。是吗:

gem = Sprite.add(gems)

我对此表示怀疑,但没有任何例子可以在网站上发布,我很茫然。

此外,我希望能够编辑某个组的属性。这是通过像我一样定义一个班级来完成的吗?或者它是我在现有精灵的定义中定义的东西,但是有一个'if sprite in group'?

4

4 回答 4

16

回答您的第一个问题;要创建一个组,您可以执行以下操作:

gems = pygame.sprite.Group()

然后添加一个精灵:

gems.add(gem)

关于您要编辑的组的属性,这取决于它们是什么。例如,您可以定义如下内容来指示组的方向:

gems.direction = 'up'
于 2012-12-13T00:35:04.607 回答
7

我知道这个问题已经得到解答,但最好的方法就像 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)

于 2013-01-14T23:46:25.440 回答
1

只需使用组列表调用超级__init__函数。例如:

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

然后,在层次结构的每个类中,您应该定义一个属性 self.groups 并且超级构造函数会将每个实例添加到其组中。这是我认为最干净的解决方案。否则,只需使用每个类中的组列表显式调用超级构造函数。

于 2012-12-13T14:34:20.400 回答
0

更简单的是,您可以将精灵直接传递给构造函数:

gems = pygame.sprite.Group(gem1, gem2)
于 2015-10-22T14:48:06.890 回答