今天我们来研究动画,其实这个动画就是一个Sprite
+Bitmap
的结合体。不造什么是Sprite
和Bitmap
?=__=#看来你是半路杀进来的,快去看看前几章吧:
Python游戏引擎开发(五):Sprite精灵类和鼠标事件
动画的原理
一般而言,我们的动画是用的这样一种图片:
播放动画的时候,像播放电影一样,这张图就是胶卷。我们可以弄一个放映机,放映机的镜头大小就是每个动作小图的大小。如果我们的胶卷不停地移动,那么就会连成动画,如下图:
如何实现这个效果呢?我们在第三章中学到了如何显示图片,其中提到了BitmapData
类(不懂?良辰劝你去读读前几章),这个类中有个两个方法:setCoordinate
和setProperty
用于设置图片显示的位置和大小:
bmpd.setCoordinate(x, y)
bmpd.setProperty(x, y, width, height)
参数图解如下:
在播放动画时,我们的“胶卷”就是一个Bitmap
图片显示对象,其中包含了一个BitmapData
对象,我们通过调用这个对象的上述两个方法,就能实现动画播放。
不过到此好像还是少了什么?也许你会问,动画是个连续的过程,且每帧动画之间需要间隔一点时间,是不是少了一个计时器?是的,是的,是的,重要的事情说三遍,我们的确少了一个计时器类似物。不过别急。大家还记得第三章中提到的显示对象的_show
方法吗?这个方法是在窗口的paintEvent
中被调用的,paintEvent
又是在一个计时器中被调用的(涉及第二章内容)。等等……计时器……所以我们其实已经有计时器了,差了个进入计时器的接口罢了。
时间轴事件
既然少了个接口,那么加个不就完了嘛。更改DisplayObject
的_show
方法:
def _show(self, c):