1、首先我们先通过使用SpriteFrameCache来创建精灵帧缓存

1
SpriteFrameCache::getInstance()->addSpriteFramesWithFile("test.plist");

2、假设test.plist中有machine_1.png和machine_2.png这两个精灵图片,通过createWithSpriteFrameName可以获取精灵:

1
auto machine = Sprite::createWithSpriteFrameName("machine_1.png");
3、创建一个Vector类型的数据用来存放所需要的精灵帧,通过for循环添加动画精灵

1
2
3
4
5
6
7
Vector<SpriteFrame*>frameVector;
for(inti=1;i<3;i++)
{
char pngName[100] = {0};
sprintf(pngName, "machine_%d.png",i);
frameVector.pushBack(SpriteFrameCache::getInstance()->getSpriteFrameByName(pngName));
}
4、设置动画参数并播放序列帧动画

1
2
3
4
5
6
7
8
9
//第二个参数是动画执行的持续时间
auto animation = Animation::createWithSpriteFrames(frameVector,0.2);
//设置动画执行完时是否回到原始状态
animation->setRestoreOriginalFrame(false);
//设置动画反复执行的次数
animation->setLoops(10000);
//用动画缓存初始化Animation实例,用Animate实例来播放序列帧动画
auto action = Animate::create(animation);
machine->runAction(Sequence::create(action,action->reverse(), NULL));
5、完整的代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
SpriteFrameCache::getInstance()->addSpriteFramesWithFile("test.plist");
//创建精灵machine
auto machine = Sprite::createWithSpriteFrameName("machine_1.png");
machine->setPosition(Vec2(visible.width/2,visible.height/2));
this->addChild(machine,1);
//创建一个Vector类型的数据用来存放所需要的精灵帧
Vector<SpriteFrame*> frameVector;
for( int i=1;i<3;i++)
{
char pngName[100] = {0};
sprintf(pngName, "machine_%d.png", i);
SpriteFrame* pngNameSF = SpriteFrameCache::getInstance()->getSpriteFrameByName(pngName);
frameVector.pushBack(pngNameSF);
}
//第二个参数是动画执行的持续时间
auto animation = Animation::createWithSpriteFrames(frameVector, 0.2);
//设置动画执行完时是否回到原始状态
animation->setRestoreOriginalFrame(false);
//设置动画反复执行的次数
animation->setLoops(10000);
//用动画缓存初始化Animation实例,用Animate实例来播放序列帧动画
auto action = Animate::create(animation);
machine->runAction(Sequence::create(action, action->reverse(), NULL));