Как я могу создать несколько уникальных экземпляров одного объекта и добавить их в список с python и pygame? - PullRequest
0 голосов
/ 14 марта 2011

Вот код для класса Поезд:

class Train(pygame.sprite.Sprite):
def __init__(self):
    pygame.sprite.Sprite.__init__(self) #call Sprite initializer
    self.image, self.rect = load_image('train.bmp', -1)
    ...

И вот где я создаю отдельные экземпляры поездов в основном цикле:

trains = pygame.sprite.Group()
while True:
    for event in pygame.event.get():
        if event ...:
            train = Train()
            train.add(trains)

Как я могу сделать каждый экземпляр поезда уникальным?

Ответы [ 2 ]

1 голос
/ 21 апреля 2011

Ваш код создает переменный поезд, но никогда не использует поезд * s *.Я переименовал переменную в train_list, чтобы сделать ее более понятной.

train_list = pygame.sprite.Group()
done = False # any code can toggle this , to request a nice quit. Ie ESC

while not done:
    for event in pygame.event.get():
        if event ...:
            train = Train()
            train_list.add(train)

Чтение документы: pygame.sprite.Group И учебник по пигмеям sprite's sprite

Что если я захочуизменить переменную одного из поездов?

# modify a variable on one train
train_list[2].gas = 500

# kill train when out of gas
for cur in train_list:
    # this will call Sprite.kill , removing that one train from the group.
    if cur.gas <= 0:
        cur.kill()

Как обновить все поезда?

Вы можете определить Train.update, чтобы использовать газ, так как SpriteGroup.update

Train(pygame.sprite.Sprite):
    def __init__(self):
        super(Train, self).__init__()
        self.gas = 100
    def update(self)
        self.gas -= 1 # or you can use a variable from the caller
вызывается Sprite.update .
0 голосов
/ 18 октября 2012

На самом деле, если вам нужно идентифицировать поезд, вы можете добавить идентификатор для каждого из них примерно так:

class Train(pygame.sprite.Sprite):
    def __init__(self, ID = None):
        # train goes here, maybe even a counter that changes "ID" to something if not user-defined.

и затем зациклите их:

for train in trains:
    if ID == "whatever you like":
        #Do something

! Псевдокод!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...