pygame:图像和精灵有什么区别?

时间:2017-02-01 17:50:55

标签: python python-3.x pygame sprite

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

2 个答案:

答案 0 :(得分:2)

我认为你对这个术语感到困惑:

  • 图像

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

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

然后,您可以随意在任意位置绘制此图像:

screen.blit(rocket_img, (x, y))
  • 的Sprite

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

一个简单的精灵:

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文档 - 您可以使用群组进行更多操作,以便轻松处理大量精灵。

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

答案 1 :(得分:0)

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

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

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

使用精灵图像属性的主要调用是image方法。

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

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

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