【问题标题】:pygame: What is the difference between an image and a sprite?pygame:图像和精灵有什么区别?
【发布时间】:2017-02-01 17:50:55
【问题描述】:

导入火箭精灵(例如)并将其设置为图像与导入火箭精灵并将其设置为 pygame 中的精灵有什么区别?

【问题讨论】:

    标签: python python-3.x pygame sprite


    【解决方案1】:

    我认为您只是对术语感到困惑:

    • 图片

    图像只是像素的集合。您正在使用“sprite”来引用磁盘上的图像,但这只是一个图像文件。要使用您的火箭示例,您可以像这样加载图像:

    rocket_img = pygame.image.load('rocket.png').convert_alpha()
    

    然后你可以在任何你想要的地方绘制这个图像:

    screen.blit(rocket_img, (x, y))
    
    • 雪碧

    Pygame 中的精灵是一个对象,具有一整套内置功能。 Sprites 具有图像作为它们的属性之一,但还有更多。另外,您可以将精灵分组在一起,以使它们更容易更新或绘制。精灵具有内置的碰撞功能。您可以添加自己的属性来跟踪位置、速度、动画等。

    一个简单的精灵:

    class Rocket(pygame.sprite.Sprite):
        def __init__(self):
            pygame.sprite.Sprite.__init__(self)
            self.image = pygame.image.load('rocket.png').convert_alpha()
            self.rect = self.image.get_rect()
    
        def update(self):
            self.rect.x += 1
    

    这将是一个火箭精灵,您可以使用它来实例化

    rocket = Rocket()
    

    你可以使用绘制

    screen.blit(rocket.image, rocket.rect)
    

    它会慢慢向右移动(如果你在游戏循环中调用 update():

    rocket.update()
    

    我建议查看 Sprite 文档 - 您可以对组进行更多操作,以便轻松处理大量 sprite。

    http://www.pygame.org/docs/ref/sprite.html

    【讨论】:

    • 请注意,在 pygame 中,保存像素的对象称为“Surface”——“image”用于处理磁盘上的图像文件。
    • 在这种情况下convert_alpha() 必须做什么?你确定它的使用目的吗?
    • convert_alpha() 应在您拥有具有像素透明度的图像时使用。如果您使用convert(),则会失去透明度。有关详细信息,请参阅文档:pygame.org/docs/ref/surface.html#pygame.Surface.convert_alpha
    【解决方案2】:

    在 Pygame 中,“图像”通常仅指图像文件:将它们导入和导出到磁盘。 “Surface”对象是一个保存像素的 Python 对象,可用于标记其他表面、进行变换(缩放/旋转)、生成其他表面等等。

    主屏幕本身是一个 Surface 子类 - 因此,当您使用从磁盘映像读取的数据标记 Surface 时,使用 blit 方法图像会显示在屏幕上。

    另一方面,Sprite 是游戏中对象的基类,它们甚至不依赖于附加的像素数据。一些 Pygame API 期望 Sprite 对象具有 rect 属性,该属性表示它将在 Surface 上渲染的位置 - 和 image 属性。如果要使用它,sprite.image 属性应该包含一个表面对象 - 通常从磁盘读取(但可以以编程方式绘制)。

    使用精灵图像属性的主要调用是Group.draw()方法。

    但是可以创建一个与交互式游戏完全不同的游戏 - 一个 MMO 游戏的服务器端,屏幕上没有任何内容,例如,使用 Sprite 和 Group 类,而无需使用精灵上的image 属性。

    值得一读: https://www.pygame.org/docs/ref/sprite.html

    相反,您可以绕过 Sprites 和 Groups 提供的所有辅助逻辑,并创建一个只有 Surface 对象的游戏 - 表示从磁盘读取的图像。您负责跟踪它们的时间和绘制时间,而不使用精灵组中的 elpe 方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-03-27
      • 2013-06-12
      • 2022-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多