cocos2d-x播放序列帧动画
最近做项目,需要用到特效,首先我想到的是动画编辑器,目前用于cocos2d-x的动画编辑器不是很多,我曾经用过一款,
Spriter 网址 http://www.brashmonkey.com/
这是一款不错的编辑器,而且对资源的节省也是不错的,但是可惜的是,我们的美术没有用过。我看了看他们做特效用的是Flash或者AE,可以很轻松的导出序列帧动画,我想既可以导出序列帧动画,那么我们在程序里直接播放就可以了。cocos2d-x自带的动画播放类是Animate,不过很遗憾,我没有用过,并且对它也没有什么兴趣,毕竟一个简单的帧动画,实现起来还是很简单的,更何况我们需要的是更多自己的定制。所以我就决定自己写一个播放序列帧的类。
1.我们新建一个类,起名字叫做QY_AnimationPlayer,注意这里,我们让它继承CCNode,而不是CCSprite
首先给它加入两个参数
//帧速
CC_SYNTHESIZE(int, m_nFrameSpeed, FrameSpeed);
//是否循环播放
CC_SYNTHESIZE(bool, m_bIsLoop, IsLoop);
这里我采用的是cocos2d-x的访问器写法,不明白的同学请自己去看源代码,或者去看Objective-C的语法,因为这一写法是来自于OC的。我们在这里定义了一个整形变量帧速和一个布尔型变量是否循环播放。
2.添加一个精灵显示每帧动画,添加一个数组,用于存放整个动画序列的图片的名字
CCSprite *m_pAnimateSprite;
我们让这个CCSprite动态的显示不同的图片,那么它就会形成一个动画,动画就是这么来的。
CCArray *m_pSpriteArray;
在这个数组里存放每一帧的图片名称,通过顺序读取这个数组里的名字,从内存中获取响应的图片,显示在界面上
3.定时器
schedule(schedule_selector(QY_AnimationPlayer::update),framespeed/1000.0);
启动一个定时器,每隔一定的时间,调用一次update函数,进行一个刷新
void QY_AnimationPlayer::update(float time)
{
//帧数
m_nAnimateCounter ++;
if(m_nAnimateCounter >= m_pSpriteArray->count())
{
if(m_bIsLoop)
{
m_nAnimateCounter = 0;
}else{
//如果不循环播放,那么播放完一遍,移除
this->unschedule(schedule_selector(QY_AnimationPlayer::update));