Как использовать группы спрайтов в pygame
Итак, я добрался до точки в моей программе, где мне нужно создать группу для некоторых спрайтов, с которыми игрок может столкнуться, не умирая (как и некоторые другие спрайты, которые у меня могут быть на экране).
Я просмотрел Google, но похоже, что официальная документация pygame бесполезна и / или трудна для понимания. Я ищу немного помощи от тех, кто знает немного об этом.
во-первых, мне нужно узнать, как создать группу. Идет ли он в начальном настройки игры?
затем добавление спрайта в группу при ее создании. Сайт pygame имеет это сказать по этому вопросу:
Sprite.add(*groups)
Так... как это использовать? Допустим у меня есть спрайт по имени Перл. Мне нужно добавить gem в группу gems. Это:
gem = Sprite.add(gems)
Я сомневаюсь в этом, но без каких-либо примеров, чтобы выйти на сайт, я в недоумении.
кроме того, я хотел бы иметь возможность редактировать атрибуты для определенной группы. Это делается путем определения группы как я класс? Или это то, что я определяю в определении существующего спрайта, но если спрайт в группе?
4 ответов
чтобы ответить на ваш первый вопрос; чтобы создать группу, вы сделали бы что-то вроде этого:
gems = pygame.sprite.Group()
затем добавить спрайт:
gems.add(gem)
Что касается атрибутов для группы, которую вы хотите отредактировать, это зависит от того, что они собой представляют. Например, вы можете определить что-то вроде этого, чтобы указать направление группы:
gems.direction = 'up'
Я знаю, что на этот вопрос уже дан ответ, но лучший метод-это то, что предложил кельвинфк. Я уточню, чтобы было понятнее.
# 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)
.
просто позвоните супер __init__
функция со списком групп. Например:
def __init__(self):
pygame.sprite.Sprite.__init__(self, self.groups)
затем в каждом классе вашей иерархии вы должны определить атрибут self.группы и супер конструктор сделают работу по добавлению каждого экземпляра в свои группы. На мой взгляд, это самое чистое решение. В противном случае просто вызовите супер конструктор явно со списком групп в каждом классе.
проще, но вы можете передать спрайты непосредственно в конструктор:
gems = pygame.sprite.Group(gem1, gem2)