2017-02-01 12 views
-2

Используя PyGame, я создал группу спрайтов для инопланетян в игре в стиле космических захватчиков.PyGame - Как перемещать много спрайтов одновременно?

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

+0

движение, каждый иностранец из списка один за другим с небольшим «шагом ». После этого вы начинаете с самого начала. Если вы повторите его в цикле (mainloop), тогда он будет выглядеть так, как будто все инопланетяне перемещаются одновременно. – furas

+0

BTW: если у инопланетянина будет функция 'update()', и вы будете держать в 'grp = pygame.sprite.Group', тогда вам нужно только' grp.update() – furas

ответ

1

Переместить каждый пришелец из списка с небольшим "шагом". После этого вы начинаете с самого начала. Если вы повторите его в цикле (mainloop), тогда он будет выглядеть так, как будто все инопланетяне перемещаются одновременно.

# mainloop 

while True: 

    # events 
    # .... 

    # updates 

    for aline in aliens_group: 
     alien.rect.x += 1 # small move 
     # or 
     alien.update() # function have to do small move 

    # draws 
    # ... 

КСТАТИ: если иностранец будет иметь функцию update() и вы будете держать иностранцев в pygame.sprite.Group, то вам нужно только group.update()

class Alien: 

    def update(self): 
     self.rect.x += 1 # small move 

# init 

aliens_group = pygame.sprite.Group() 

alien_1 = Alien() 
alien_2 = Alien() 

aliens_group.app(alien_1, alien_2) 

# mainloop 

while True: 

    # events 
    # .... 

    # updates 

    aliens_group.update() # function have to do small move 

    # draws 

    aliens_group.draw() 
+0

Хорошая работа :) Ваш код аккуратный и описательный. Единственное, что я советовал, это функция «карта», основная точка моего ответа. Использование итерации происходит намного медленнее. В любом случае функция 'map' является хорошей практикой :) В целом вы хорошо выглядите: D –

+0

@CoolqB' pygame.sprite.Group() 'еще лучше, чем' map' – furas

+0

Хорошо, давайте посмотрим, как долго код взять? Я приурочил мое, и это заняло ... 0.0 секунд: P Я использовал cProfile. :) –

-1

OK если у вас есть позиции иностранцев, находящихся в списке, вы можете использовать map функцию:

aliens = [[0,0],[5,9],[5,2]] # Three aliens in list, these are their X,Y coords. 

def move_alien_right(alien): 
    alien[0] += 1 
    return alien 

aliens = list(map(move_alien_right,aliens)) 

print(aliens) 

map функция очень быстро, поэтому если у вас есть большие группы иностранцев, он должен работать достаточно хорошо ,

Спасибо :)

+0

У меня есть значения прямых для каждого иностранца в списке. Так будет ли это работать? –

+0

A Pygame rect? Если это так, я могу отредактировать мой ответ, если это так. –

+0

почему downvote? –