【问题标题】:Questions with creating sprites in pygame在 pygame 中创建精灵的问题
【发布时间】:2020-06-05 08:05:43
【问题描述】:

所以基本上我知道该怎么做就是添加一个玩家精灵(创建一个从 pygame.sprite 继承的玩家类等......)这对我有用。

我想知道如何做的是迭代精灵的创建并将它们添加到精灵组中。 这是因为我有一个二维数组,并且我有一个函数可以读取它并将“图块”相应地放置在二维空间中,这是为了更容易地创建关卡。 所以我想要这个函数做的是创建这些精灵(我猜是用一个读取数组的 for 循环?)并将它们添加到组中,但这不起作用所以我首先有一些问题:

1)您可以在类中的 init 函数之外创建精灵吗?

2)精灵到底是什么,它是一个耦合到矩形的表面吗?

3)最后你有一个简单的想法吗:如果我给你一个二维数组,你将如何制作读取这个数组并计算位置的函数(这没关系,我想我弄清楚了),最重要的是,从给定的位置制作精灵,然后可以添加到精灵组中。

提前致谢

【问题讨论】:

    标签: pygame sprite


    【解决方案1】:

    你可以在类的 init 函数之外创建精灵吗?

    当然。

    什么是精灵,它是耦合到矩形的表面吗?

    如果我们谈论 pygame 的 Sprite 类:是的。

    这样的精灵基本上是一个Surfaceimage 属性)和一个Rectrect 属性)。它们与 pygame 的 Group 类一起使用效果最好。

    最后,您是否知道如何简单地完成这项工作......

    只需创建一个嵌套循环来迭代数组。

    这是一个简单的例子:

    import pygame
    pygame.init()
    
    TILESIZE = 64
    
    class Actor(pygame.sprite.Sprite):
        def __init__(self, color, pos):
            super().__init__()
            self.image = pygame.Surface((TILESIZE, TILESIZE))
            self.image.fill(pygame.Color(color))
            self.rect = self.image.get_rect(topleft = pos)
    
    def main():
    
        data = [
            '     YUB  ',
            '  G       ',
            '        B ',
            '          ',
            '   Y      ',
            '        U ',
        ]
    
        screen = pygame.display.set_mode((len(data[0]) * TILESIZE, len(data) * TILESIZE))
        sprites = pygame.sprite.Group()
    
        colors = {
            'G': 'green',
            'B': 'black',
            'Y': 'yellow',
            'U': 'dodgerblue'
        }
    
        x, y = 0, 0
        for line in data:
            for char in line:
                if char in colors:
                    sprites.add(Actor(colors[char], (x * TILESIZE, y * TILESIZE)))
                x += 1
            x = 0
            y += 1
    
        while True:
            events = pygame.event.get()
            for event in events:
                if event.type == pygame.QUIT:
                    pygame.quit()
                    return
    
            sprites.update()
    
            screen.fill((100, 100, 100))
            sprites.draw(screen)
    
            pygame.display.flip()
    
    main()
    

    你可以找到另一个例子here

    【讨论】:

      猜你喜欢
      • 2021-05-23
      • 2023-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-12
      • 1970-01-01
      • 2019-03-23
      • 2023-03-05
      相关资源
      最近更新 更多