Spirte 的概念在很多游戏引擎中都有,但是没有统一的定义,可以笼统的认为 Sprite 是一个对象,可以方便创建、绘制、管理、销毁运动实例。
PyGame 中的 Sprite 通过继承 Sprite 类实现,主要动作是重载 update 方法和给 image、rect 属性赋值。其中,image 表示这个 Sprite 的显示图形,rect 表示图形的位置和大小,而update用于更新 Sprite 的行为,比如:位置、大小、方向、图形的变化等。
https://www.pygame.org/docs/tut/SpriteIntro.html
前面,我们移动方块的例子是绘制的,现在,我们用 Sprite 来实现:
class Block(pygame.sprite.Sprite):
# 构造函数,方块颜色和长、宽
def __init__(self, color, width, height):
# 调用父类构造函数
pygame.sprite.Sprite.__init__(self)
# 创建指定大小方块,填充颜色,也可从图片文件加载
self.image = pygame.Surface([width, height])
self.image.fill(color)
# 获取默认大小和位置
self.rect = self.image.get_rect()
# 移动到初始位置
self.rect = self.rect.move(100, 100)
# 初始化当前移动方向,向左
self.direction = 1
def update(self):
if width - self.rect.width <= self.rect.left or self.rect.left < 0:
self.direction = -self.direction
self.rect = self.rect.move(self.direction, 0)
# print("update rect", self.direction, width, (width - self.rect.width), self.rect)
block = Block(color, 20, 20)
感觉绘制一个方块比前面需要更多的代码,但是实际上,对于游戏里面众多的动画对象,使用 Sprite 结构和逻辑更加清晰。