Cómo usar grupos de sprites en pygame

Así que he llegado al punto en mi progtwig donde necesito crear un grupo para algunos sprites con los que el jugador pueda colisionar sin morir (como otros sprites que puedo tener en la pantalla).

He rastreado Google pero parece que la documentación oficial de pygame es inútil y / o difícil de comprender. Estoy buscando solo un poquito de ayuda de cualquiera que sepa un poco sobre esto.

Primero, necesito descubrir cómo crear un grupo. ¿Va en la configuración inicial del juego?

Luego agregando un sprite a un grupo sobre su creación. El sitio de pygame tiene esto que decir sobre el tema:

Sprite.add(*groups) 

Entonces … ¿cómo se usa esto? Digamos que tengo un sprite llamado gem. Necesito agregar gem al grupo de gems. Lo es:

 gem = Sprite.add(gems) 

Lo dudo, pero sin ningún ejemplo para salir del sitio, estoy perdido.

Además, me encantaría poder editar atributos para un grupo determinado. ¿Se hace esto definiendo un grupo como lo haría con una clase? ¿O es algo que defino dentro de la definición para el sprite existente, pero con un ‘si sprite en grupo’?

Para contestar tu primera pregunta; para crear un grupo harías algo como esto:

 gems = pygame.sprite.Group() 

Luego para agregar un sprite:

 gems.add(gem) 

En cuanto a los atributos para el grupo que te gustaría editar, depende de lo que sean. Por ejemplo, podría definir algo como esto para indicar la dirección del grupo:

 gems.direction = 'up' 

Sé que esta pregunta ya ha sido respondida, pero el mejor método es como lo que sugirió kelwinfc. Lo elaboraré para que sea más comprensible.

 # 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() [, , ] 

También puede agregar más con gems.add(some_sprite) y también eliminarlos con gems.remove(some_sprite) .

Simplemente llame a la función super __init__ con la lista de grupos. Por ejemplo:

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

Luego, en cada clase de su jerarquía, debe definir un atributo self.groups y el súper constructor hará el trabajo de agregar cada instancia a sus grupos. Esta es la solución más limpia en mi opinión. De lo contrario, simplemente llame al súper constructor explícitamente con la lista de grupos en cada clase.

Más fácil aún, puedes pasar los sprites directamente al constructor:

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