多张序列帧指的是每一帧是一张单独的图片,如图1所示。

图1 多张序列帧
连续显示这些序列帧,就可以实现动画效果,如图2所示。

图2 动画效果
1 构造多帧图片的文件名列表
通过多张帧序列显示动画,就需要将这些帧序列图片都导入到程序中。因此,需要将这些图片名放到列表中,以便使用。从图1中可以看出,每张序列帧的名字都是以"BucketheadZombie_数字.png"的格式命名的,因此,可以通过图3所示的代码将图片名放入到列表中。

图3 将图片名放入到列表中的代码
以上代码通过列表推导式,将图片名放入到列表中,这些帧图片都保存在"BucketheadZombie"文件夹中。imagepath_list中的元素如图4所示。

图4 imagepath_list中的元素
相关链接1 列表推导式的相关知识,请参考《Python中List推导式的使用方法》。
2 修改MySprite类的__init__()方法
显示动画效果,实际上就是实现序列帧的切换显示。通过MySprite类的时间属性控制序列帧的切换,代码如图5所示。

图5 init()函数的代码
其中,第26-28行代码与《《pygame中Sprite类实现多帧动画》注-显示静态图片2-1》中相同;第29-30行定义的current_time和last_time表示当前时间和显示当前帧的时间,第31行定义的current_frame表示显示的当前帧图片,如图6所示。

图6 时间属性示意图
从图6的左边向右边看,当current_time-last_time的值超过某个阈值speed时,说明当前帧图片current_frame已经显示了足够长的时间,该换下一张帧图片了,此时current_frame加1,表示显示下一张帧图片,然后last_time的值变为current_frame,重新获取current_frame的值为当前时间值。如此循环下去,完成帧图片的连续显示。