Pygame中Sprite类实现多帧动画3-1
1 多帧动画介绍
通过多个帧实现动画的原理如图1所示。
图1 多个帧
其中图1包含了6个飞龙的动作,这6个动作可以看作6个帧,按照一定的时间间隔显示这6个帧,就可以得到飞龙飞行的效果,如图2所示。
图2 飞龙飞行动画
相关链接1 帧:是影像动画中的最小单位画面。在影像动画中,一帧是一幅静止的画面,连续的帧形成动画或视频。
2 Sprite类介绍
Pygame中的Sprite类用于游戏开发,表示游戏中的角色、道具或者背景等各种元素。通过Sprite类,可以轻松管理和操作游戏中的图形对象,使得游戏开发变得更加简单和高效。Sprite类也叫做“精灵”类。
3 自定义“精灵”类的子类
通过“精灵”类实现多帧动画,一般是自定义精灵类的子类,该子类表示游戏中的“飞龙”这个角色。
3.1 子类的__init__()方法
代码如图3所示。
图3 自定义“精灵”类的子类
从图3中可以看出,MySprite类是派生自pygame.sprite.Sprite类的子类;在该类的__init__()方法中,第7行代码调用其父类的__init__()方法,第8-9行定义了MySprite类的两个属性image和rect,这两个属性是自定义“精灵”类的子类必备的,分别表示该类对应的图片以及图片的大小。除了以上两个属性,在__init__()方法中还定义了其它属性,这些属性没有在图3的代码中显示出来,后续用到哪个属性再详细讲解。
3.2 子类的load()方法
MySprite类load()方法作用是导入包含“飞龙”所有帧的图片,即图1显示的图片文件;设置每帧的宽度、高度及范围;获取图片中最后一帧的编号。
3.2.1 子类的load()方法的格式
子类的load()方法的格式如图4所示。
图4 load()方法的格式
其中,filename表示要导入的图片文件名;width和height表示每一帧的宽度和高度;columns表示图片中包含的帧有多少行。
3.2.2 导入图片
在load()函数中,首先导入图片文件,代码如图5所示。
图5 导入图片文件代码
其中,master_image是MySprite类的属性,在其__init__()方法中定义;通过pygame.image.load()方法导入图片文件,convert_alpha()方法的作用是将图片转换为支持透明度的更高效的格式,使用这种转换后的格式,当调用blit()方法显示该图片时,可以提高显示速度。