Pygame实现动画效果2-1
1 Pygame实现动画效果的原理
1.1 像素实现动画的原理
通过在设置像素的不同位置,可以实现像素动画效果,其原理如图1所示。
图1实现像素动画效果的原理
其中,图1①所示的黑色像素位于(0, 4)位置处,接下来把该黑色像素的位置设置为(0, 3),并且将(0, 4)位置处像素设置为白色,如图1②所示;最后把黑色像素的位置设置为(0, 2),并且将(0, 3)位置处像素设置为白色,如图1③所示。如果把以上动作在短时间内快速实现,此时所呈现的效果就是黑色像素从(0, 4)位置移动到了(0, 2),实现了动画效果。
1.2 图片实现动画的原理
图片实现动画的原理与像素实现动画效果类似,在短时间内显示不同图片(或者在不同位置显示相同图片),就能实现动画效果,如图2所示。
图2 图1实现图片动画效果的原理
从图2中可以看出,如果在短时间快速显示这三张图,就会实现“猫”靠近“松鼠”的动画。
2 Pygame实现动画效果的例子
通过Pygame实现汽车动画的效果如图3所示。
图3 汽车动画的效果
2.1 导入并处理汽车图片
导入并处理汽车图片的代码如图34所示。
图4 导入并处理汽车图片的代码
其中,第13行代码通过pygame.image模块中的load()函数导入汽车图片,“car.png”是汽车图片的文件名,该图片保存在carImg中;因为导入的图片比较大,第14行代码通过pygame.transform模块中的scale_by()函数将图片进行放缩处理,其中第一个参数表示要处理的图片,第二个参数是一个元组,其两个元素分别表示对图片的宽度和高度进行放缩的比例,0.5表示缩小到原来的二分之一;原始图片中,汽车头的方向是朝下的,通过第15行代码旋转图片,调整汽车头的方向,通过pygame.transform模块中的rotate()函数实现,该函数的第一个参数表示要旋转的图片,第二个参数表示逆时针旋转的角度,90表示将汽车头从朝下的方向旋转为朝右边。
2.2 设置汽车图片的位置
从图3中可以看到,程序运行后汽车是从左向右行驶,要实现这种动画效果,只需要改变汽车图片的横坐标即可;当汽车行驶到屏幕最右侧时,掉转车头向下行驶,此时改变汽车图片的纵坐标就可实现,代码如图5所示。
图5 设置汽车图片的位置的代码
程序运行后,汽车向右侧行驶,因此第24行代码判断汽车的行驶方向direction是否是“right”,如果是,则此时通过第25行代码增加汽车图片的横坐标carx,实现向右行驶的效果;接下来第26行代码使用if语句判断carx是否大于350,即判断汽车是否已经行驶到了屏幕的最右端,如果是,则第27行代码将汽车的行驶方向direction设置为“down”,表示汽车开始向下行驶;当汽车向下行驶时,需要旋转汽车图片,使其车头朝下,因此第28行代码将旋转图片的标志rotate设置为True,在图6所示的代码中进行旋转。
图6 旋转汽车图片的代码
其中,第45行代码判断旋转图片的标志rotate是否是True,如果是,则第46行代码调用pygame.transform模块中的rotate()函数将汽车图片逆时针旋转270度,改变车头的朝向。
图5中29-33行代码是当汽车朝下行驶时的处理;34-38行代码时汽车朝左行驶时的处理;第39-43行代码时汽车朝上行驶时的处理。