cocos2d-x学习笔记(二)序列帧动画实现的几种方法
admin
2023-02-12 07:00:06
0

一、cocos2d-x帮助文档中关于动画帧动画的实现有两种方法:

  • 手动添加序列帧到Animation类

  • 使用文件初始化Animation类

这里我就不列出来,大家可以看下官方文档

http://www.cocos.com/doc/article/index?type=cocos2d-x&url=/doc/cocos-docs-master/manual/framework/native/v3/frame-animation/zh.md


二、有些时候我们需要从plist取出指定的几个图片(而不是全部)来播放动画,接下来我们主要介绍下这种方法:


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

    

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


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


auto machine = Sprite::createWithSpriteFrameName("machine_1.png");

3、创建一个Vector类型的数据用来存放所需要的精灵帧,通过for循环添加动画精灵


VectorframeVector;
for(inti=1;i<3;i++)
{
    char pngName[100] = {0};
    sprintf(pngName, "machine_%d.png",i);
    frameVector.pushBack(SpriteFrameCache::getInstance()->getSpriteFrameByName(pngName));
}

4、设置动画参数并播放序列帧动画


//第二个参数是动画执行的持续时间
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、完整的代码如下:

    

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 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));


相关内容

热门资讯

德国总理:美国正在被伊朗羞辱 德国之声4月27日报道,德国总理默茨在访问一所学校时表示,在当前的持续冲突中,伊朗领导层正试图羞辱美...
理响中国|“长”歌以行,风云激... 光阴如梭,东方潮阔。这里是中国的长三角,世界的长三角。无论过去、现在还是未来,这片土地都因时代而生,...
白宫:特朗普及其国安团队开会讨... 新华社华盛顿4月27日电 美国白宫新闻秘书莱维特27日在记者会上证实,总统特朗普及其国家安全团队当天...
人民日报刊文:日本放开杀伤性武... 日本放开杀伤性武器出口推高地缘冲突风险(国际论坛)常思纯《人民日报》(2026年04月28日 第 0...
医疗保障法草案二审:明确生育保... 满足多样化健康保障需求本报记者 彭 波4月27日,医疗保障法草案二审稿提请十四届全国人大常委会第二十...
天津一景区发生自转旋翼机事故1... 澎湃新闻记者 吕新文中国民用航空华北地区管理局4月22日公布《豪客通航“10•1”天津长芦汉盐旅游区...
卡塔尔埃米尔与美国总统特朗普通... 当地时间24日,卡塔尔埃米尔塔米姆与美国总统特朗普通电话,重点就中东地区局势以及伊朗与美国谈判问题交...
男子30年前被扣押2859克黄... 澎湃新闻记者 王鑫家住辽宁省大连市的潘永嘉近日向澎湃新闻反映称,三十年前,他在大连周水子机场被盖州市...
商务部:取消反制欧盟两家金融机... 中华人民共和国商务部令二〇二六年 第1号鉴于欧盟已取消对中国两家金融机构的制裁措施,现公布《关于取消...
过去24小时共有5艘船只通过霍... 总台记者当地时间24日获悉,过去24小时内,共有5艘船只通过霍尔木兹海峡,其中包括一艘伊朗油轮。(总...