Я бы использовал randint
и move_ip
, чтобы получить то, что вы хотите.Вот фрагмент кода из моей собственной игры, который работает так же хорошо:
self.rect.move_ip(random.randint(minX, maxX), random.randint(minY, maxY))
четыре переменные minX, maxX, minY, maxY образуют прямоугольник, в котором можно разместить спрайт.В вашем случае деревья будут располагаться вдоль всего экрана, но с уменьшенным максимальным диапазоном X и Y, чтобы деревья не проходили через нижнюю часть экрана.
Также используйте класс Group
хранить ваши деревья, а не список.Список останавливает порождение нескольких деревьев, а Group
-.Вот как это назвать:
Treegroup = pygame.sprite.Group
и добавить спрайт в группу:
Treegroup.add(Tree1(screen))
Убедитесь, что класссам по себе экран в своем инициализации, например, так:
def __init__(self, screen)
Как только это будет сделано, ваш код должен выглядеть примерно так:
for Treegroup in range(10):
Treegroup.add(Tree(screen))
[...]
class Tree(pygame.sprite.Sprite):
def __init__(self, screen):
pygame.sprite.Sprite.__init__(self)
self.image, self.rect = load_image('tree.png', -1)
self.rect.move_ip(random.randint(0, 800), random.randint(0, 600))
self.area = screen.get_rect()