Есть два способа сделать это в Pygame
1) использовать группу спрайтов
2) использовать список
Вы не настроили свой класс для группы спрайтов, поэтому я начну со списка
У вас есть asteroids = Asteroid(pos=(400, 300))
, что хорошо, потому что для того, чтобы сделать больше, вам нужно всего лишь asteroids = [Asteroid(pos=(400, 300))]
, теперь у вас есть список с 1 астероидом. Чтобы сделать больше, вы можете позвонить Asteroid
больше раз, чтобы
asteroids = [Asteroid(pos=(400, 300)) for x in range(10)]
Теперь у вас есть 10 астероидов, но они начинаются в той же позиции, поэтому
asteroids = [Asteroid(pos=(400 + (x*30), 300)) for x in range(10)]
Теперь у нас есть 10 астероидов 30 пикселей друг от друга
Чтобы обновить и нарисовать их, l oop через список
#Update asteroids
for asteroid in asteroids:
asteroid.update()
#same for draw
#Draw asteroids
for asteroid in asteroids:
display.blit(asteroid.image, asteroid.rect)
, если у вас много астероидов, было бы неплохо объединить эти петли, это все еще в порядке.
SpriteGroups
Чтобы настроить класс для спрайт-группы, он нужен для наследования класса Sprite
class Asteroid(pygame.sprite.Sprite):
#Initialize values
def __init__(self, pos=(0, 0)):
pygame.sprite.Sprite.__init__(self) #initialize the Sprite class
, после чего вы можете создать группу спрайтов.
#Asteroid starting position
asteroids = pygame.sprite.Group()
for x in range(10):
asteroids.add(Asteroid(pos=(400 + (x*30), 300))) #all 30 pixels apart
и для их обновления вы можете сделать то же, что делаете сейчас
#Update asteroids
asteroids.update()
Рисовать, даже проще, чем вы делаете сейчас
#Draw asteroids
asteroids.draw(display)