cocos2d-x学习笔记(二)序列帧动画的实现

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

    

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


2、假设test.plist中有machine_1.pngmachine_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;
forint 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));


发表评论

(必填)

(必填)

(以便回访)

博客已稳定运行: 访问量:156,323 views 网站备案号:闽ICP备17026396号-1