【问题标题】:Is there a better way of creating instance objects for a scene in pygame?有没有更好的方法在 pygame 中为场景创建实例对象?
【发布时间】:2020-03-02 23:23:03
【问题描述】:

我希望在我的游戏中在 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)

这就是我目前创建对象的方式,而且……这不可能。我的课在这里。有没有办法以简化的方式创建所有这些对象,以及它们的特定属性?我曾想过在 for 循环中创建它们,但这并没有赋予它们单独的属性。

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

【问题讨论】:

    标签: python oop pygame


    【解决方案1】:

    您可以使用list()dict() 来存储您的属性:

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

    然后您只需通过索引访问它们:self.trees[5] 而不是 self.tree05

    如果你不理解这个语法,请查看 List Comprehension,它基本上是一个 for 循环,但更短。

    【讨论】:

    • 哦,我没有意识到这会起作用。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2021-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多