文档章节

Cocos2d-x 动画小结

冰释的火焰
 冰释的火焰
发布于 2015/09/17 22:47
字数 707
阅读 36
收藏 0

 动画:

创建 :  Vector<SpritFrame*>frames     Animation        Animate    runAction


            {

                         //通常的做法

                         Vector< SpriteFrame * > frames;


                         //加载plist到frames

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

              for ( int i = 1; i < 14; ++ i)   //14是有多少的个图片

                        {

                        char buf[256];

                         sprintf_s(buf , "%s%02d%s" , "xxxxx" , i , ".png" );

                         SpriteFrame * frame = SpriteFrameCache::getInstance ()->getSpriteFrameByName (buf );

                                     frames. pushBack( frame);

                        }

             //执行动画

                         Animation * animation = Animation:: createWithSpriteFrames(frames , 0.1f);


                         //动画缓存

                         AnimationCache::getInstance ()->addAnimation (animation , "Myanimation" );

                        

                         auto ev = EventListenerTouchOneByOne::create ();


                         ev-> onTouchBegan = [&]( Touch * touch , Event *)

                        {

                                     this-> runAnimation();

                        };


                         this-> _eventDispatcher->addEventListenerWithSceneGraphPriority (ev , this );

void  runAnimation ()

{

             //加入缓存实现动画

             Animate * animate;

             animate = Animate::create (AnimationCache ::getInstance ()->getAnimation ("Myanimatio" ));


             Sprite * sp = Sprite:: create();

             sp-> runAction( RepeatForever::create (animate ));

             this-> addChild( sp);

             sp-> setPosition(100, 200);


}



动画缓存的删除方式:先动画缓存,再精灵帧缓存,再纹理缓存,依依依靠,一个引用一个

             //删除 先删除动画缓存,然后精灵帧缓存, 纹理缓存,依依释放

             AnimationCache ::destroyInstance ();

             SpriteFrameCache ::destroyInstance ();

             Director:: getInstance()-> getTextureCache ()->removeAllTextures ();


cocos2d-3.6版本提供了接口,可以直接使用Plist的文件。但是这个对Plist的文件有很高的要求。一般的Plist都是不可以的



封装一个动作的接口

Animation*  getAnimation (const char * plist , float delay )

{

             Animation* ret = AnimationCache::getInstance ()->getAnimation (plist );

             if ( ret) return ret;


             Vector< SpriteFrame*> frames;

             SpriteFrameCache::getInstance ()->addSpriteFramesWithFile (plist );


             std:: vector<std ::string> frameNames;


             /* 通过plist文件,获取所有的帧的名字 */

             ValueMap vm = FileUtils:: getInstance()-> getValueMapFromFile(plist );

             ValueMap& vmFrames = vm[ "frames"].asValueMap ();

             for ( auto it = vmFrames. begin(); it != vmFrames. end(); ++ it)

            {

                         frameNames. push_back(it ->first);

            }

            // 对已经取出的图片进行排序

             std:: sort( frameNames. begin(), frameNames. end());

             for ( auto it = frameNames. begin(); it != frameNames. end(); ++ it)

            {

                         CCLOG( "%s", (*it ).c_str ());

                         SpriteFrame* frame = SpriteFrameCache::getInstance ()->getSpriteFrameByName (*it );

                         frames. pushBack( frame);

            }


             ret = Animation:: createWithSpriteFrames(frames , delay );

             AnimationCache::getInstance ()->addAnimation (ret , plist );

             return ret;

}

// 动画第一帧用来创建精灵


Sprite * sprite = Sprite::createWithSpriteFrame(animation->getFrames().at(0)->getSpriteFrame());





骨骼动画:

它的配置文件格式是   .atlas  

添加骨骼动画必须的头文件

并且在编译器属性中加入骨骼动画所在的文件路径

$(EngineRoot)cocos\editor-support

#include "spine/spine.h"
#include "spine/spine-cocos2dx.h"

创建与执行骨骼动画

spine::SkeletonAnimation* ske =
          spine::SkeletonAnimation::createWithFile("spine/spineboy.json", "spine/spineboy.atlas");
ske->setAnimation(0, "run", true);  // 三个参数 第一个默认音符,第二个是执行动画,第三个是循环播放

设置两个动作切换的时间差

     ske->setMix("run", "hit", 1.0f);
     ske->setMix("hit", "walk", 0.5f);

时间缩放比例, 越小越慢

ske->setTimeScale(time.0f);

设置是否显示骨骼

ske->setDebugBonesEnabled(true);

捕捉信号

设置回调函数,在setAnimation()中设置

spTrackEntry* entry = ske->setAnimation(0, "run", true);
// 两个参数  std::string(ev->data->name)  获取名字
ske->setEventListener([](int trackIndex, spEvent* ev){
          if (std::string(ev->data->name) == "footstep")
          {
               CCLOG("foot step event");
          }
     });

给骨骼主角设置别的属性

ske->setAttachment( "gun" , 0 ); //0就是没有东西

骨骼主角的外切矩形

在定时器中绘制

void  update(float dt)
{
     Rect rc = _ske->getBoundingBox();
     if (_node) _node->removeFromParent();
     _node = DrawNode::create();
     addChild(_node);                   
     _node->drawRect(rc.origin, rc.origin + rc.size, Color4F::RED);
     //origin    获取坐标     Size有一个强制类型重载可以把他转化为Vec2()
}



© 著作权归作者所有

共有 人打赏支持
冰释的火焰
粉丝 1
博文 10
码字总数 2357
作品 0
成都
程序员
私信 提问
购买李宁Cocos2d-x套餐,送最新出的《Cocos2d-x游戏实战指南》签名书一本

活动时间:2016-10-18至2016-11-30 通过本套餐,可完全了解Cocos2d-x 3.x的相关技术,以及掌握C++语言,并具有一定的项目实战经验。 Cocos2d-x游戏开发套餐:http://edu.51cto.com/pack/vie...

androidguy
2018/06/29
0
0
《Cocos2d-x实战 C++卷》上线了-源码-样章-感谢大家的支持

《Cocos2d-x实战 C++卷》上线了 感谢大家一直以来的支持! 全面介绍Cocos开发技巧,采用Cocos2d-x3.2版本,并且详细介绍跨平台移植已经多平台发布细节。 · 各大商店均开始销售: 京东:htt...

智捷课堂
2014/12/01
0
0
《Cocos2d-x实战 Lua卷》上线了

感谢大家一直以来的支持! 各大商店均开始销售: 京东:http://item.jd.com/11659697.html 当当:http://product.dangdang.com/23659810.html 《Cocos2d-x实战 Lua卷》源码及样章下载地址: ...

智捷课堂
2015/03/26
0
1
《Cocos2d-x实战 JS卷 Cocos2d-JS开发》上线了

感谢大家一直以来的支持! 各大商店均开始销售: 京东:http://item.jd.com/11659698.html 当当:http://product.dangdang.com/23659808.html 《Cocos2d-x实战 JS卷 Cocos2d-JS开发》源码及样...

智捷课堂
2015/03/26
0
0
Cocos2d-x 2.0 之 Actions “三板斧” 之一

[Cocos2d-x相关教程来源于红孩儿的游戏编程之路CSDN博客地址:http://blog.csdn.net/honghaier] 红孩儿Cocos2d-X学习园地QQ群:249941957 [暂满]加群写:Cocos2d-x 红孩儿Cocos2d-X学习园地Q...

长平狐
2013/03/19
32
0

没有更多内容

加载失败,请刷新页面

加载更多

IOS  学习记录

1.StackView=>IOS 9及以上支持 2.布局方式: AutoLayout / StackView 堆布局 (线性布局) 3.屏幕适配 (资源分辨率、设计分辨率、屏幕分辨率) Size Class技术 可以针对 屏幕的方向进行设置...

萨x姆
40分钟前
0
0
第四次工业革命:自主经济的崛起

https://36kr.com/p/5170370.html

shengjuntu
昨天
3
0
Cloud Native 与12-Factor

12-Factor(twelve-factor),也称为“十二要素”,是一套流行的应用程序开发原则。Cloud Native架构中使用12-Factor作为设计准则。 12-Factor 的目标在于: 使用标准化流程自动配置,从而使...

waylau
昨天
9
0
java多线程2

“非线程安全”问题存在于“实例变量”中,如果是方法内部的私有变量,则不存在线程安全问题。这是因为方法内部的变量都是私有造成的。 synchronized 获取的都是对象锁。如果多个线程访问多个...

一滴水穿石
昨天
4
0
今天的学习

1,document.location.href:获取整个url 2,str.split(' '):用字符分割字符串 3,$this->load->library(' '):引用图像处理类 4,$this->load->library(' '):引用Email类 5,特殊访问指针$th......

墨冥
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部