Есть ли лучший способ создания экземпляров объектов для сцены в Pygame? - PullRequest
1 голос
/ 03 марта 2020

Я собираюсь создать сцену в своей игре в Pygame, но мне кажется, что мне нужно визуализировать каждый спрайт и препятствие индивидуально, и когда сцена становится больше, она становится ... повторяющейся.

    self.tree01 = Obstacles(config.tree01, 0, 10, self.player.group)
    self.tree02 = Obstacles(config.tree01, 1, 10, self.player.group)
    self.tree03 = Obstacles(config.tree01, 2, 10, self.player.group)
    self.tree04 = Obstacles(config.tree01, 3, 10, self.player.group)
    self.tree05 = Obstacles(config.tree01, 4, 10, self.player.group)
    self.tree06 = Obstacles(config.tree01, 5, 10, self.player.group)
    self.tree07 = Obstacles(config.tree01, 6, 10, self.player.group)
    self.tree08 = Obstacles(config.tree01, 7, 10, self.player.group)
    self.tree09 = Obstacles(config.tree01, 8, 10, self.player.group)
    self.tree10 = Obstacles(config.tree01, 9, 10, self.player.group)
    self.tree11 = Obstacles(config.tree01, 10, 10, self.player.group)
    self.tree12 = Obstacles(config.tree01, 11, 10, self.player.group)
    self.tree13 = Obstacles(config.tree01, 12, 10, self.player.group)
    self.tree14 = Obstacles(config.tree01, 13, 10, self.player.group)
    self.tree15 = Obstacles(config.tree01, 14, 10, self.player.group)
    self.tree16 = Obstacles(config.tree01, 15, 10, self.player.group)
    self.tree17 = Obstacles(config.tree01, 16, 10, self.player.group)

Вот как я сейчас создаю свои объекты и ... это не может быть правдой. Мой класс здесь. Есть ли способ создать все эти объекты с их указанными c свойствами в упрощенном виде? Я думал о создании их в для l oop, но это не дает им индивидуальные свойства.

class Obstacles(pygame.sprite.Sprite):
    def __init__(self,image, x, y, player):
        pygame.sprite.Sprite.__init__(self)
        self.image = image
        self.rect = self.image.get_rect()
        self.player = player
        self.rect.x = x * config.scale
        self.rect.y = y * config.scale
        self.check_collision = False

        self.rect.topleft = self.rect.x, self.rect.y

        self.groupObs = pygame.sprite.Group()
        self.groupObs.add(self)
        self.check_collide()


    def draw(self, screen):
        self.groupObs.draw(screen)
        self.rect.topleft = self.rect.x, self.rect.y

1 Ответ

1 голос
/ 03 марта 2020

Вы можете использовать list() или dict() для хранения ваших свойств:

self.trees = [Obstacles(config.tree01, x, 10, self.player.group) for x in range(16)]

Затем вы просто получаете к ним доступ по индексу: self.trees[5] вместо self.tree05

Если вы не понимаете этот синтаксис, посмотрите список понимания, это в основном for l oop, но короче.

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