导入火箭精灵(例如)和将其设置为图像与导入火箭精灵并将其设置为pygame中的精灵有什么区别?
答案 0 :(得分:2)
我认为你对这个术语感到困惑:
图像只是像素的集合。您正在使用“精灵”来引用磁盘上的图像,但这只是一个图像文件。要使用您的火箭示例,您可以像下面这样加载图像:
rocket_img = pygame.image.load('rocket.png').convert_alpha()
然后,您可以随意在任意位置绘制此图像:
screen.blit(rocket_img, (x, y))
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文档 - 您可以使用群组进行更多操作,以便轻松处理大量精灵。
答案 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方法。