Cocos2d-x 3.x序列帧动画

Posted Echo-BOX

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Cocos2d-x 3.x序列帧动画相关的知识,希望对你有一定的参考价值。

 

Animation : 一个给精灵对象执行的帧动画对象。
Animate:是将动画包装成动作的类。
AnimationCache:管理动画的单例。

简介

Animation

Animation帧动画对象包含动画帧对象,和帧间时长等等。

1 精灵帧(SpriteFrame)
每一个Animation对象,是由多个SpriteFrame组成。

2 帧间隔时间(delayPerUnit)
动画中的每两帧的间隔时间。

3 播放次数(loops)

Animate

但是Animation只是包含了创建真正“动作”的必要信息,要想成为一个动作,需要使用一个Animate来包装一个Animation对象。Animate动作只能由Sprite对象执行。

AnimationCache

创建好的Animation,可以加到缓存中,方便以后使用。它用于缓存的动画。如果你想在缓存中保存你的动画,你应该使用这个类。

Animation

  • 使用多个精灵帧创建动画
createWithSpriteFrames(Vector<SpriteFrame *> frameVec);

  • 添加一个SpriteFrame到动画中
void addSpriteFrame (SpriteFrame *frame);

需要先将纹理打包文件.plist,通过SpriteFrameCache加载到缓存,然后获得精灵帧SpriteFrame。
例如:

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

SpriteFrame * frame = SpriteFrameCache::getInstance()->getSpriteFrameByName("test1.png");

Animation * aniMation = Animation::create();
aniMation->addSpriteFrame(frame);

  • 使用图片名添加一个帧,内部将会创建一个SpriteFrame并添加它。
void addSpriteFrameWithFile (const std::string &filename);
  • 设置帧间隔时间
void setDelayPerUnit (float delayPerUnit);
  • 设置循环次数
void setLoops (unsigned int loops);//0表示动画不执行,1表示动画执行一次,-1表示动画循环执行。
  • 获得一个动画副本
Animation * clone ();

 

  • 设置是否在动画结束时恢复至初始帧
void setRestoreOriginalFrame (bool restoreOriginalFrame);

 

Animate

  • 使用Animation对象创建动作
static Animate * create(Animation *animation);

 

  • 设置动画对象
void setAnimation(Animation *animation);

 

  • 获得相反的动作
virtual Animate * reverse();

 

  • 获得当前的动画对象
Animation * getAnimation();
  • 1

AnimationCache

  • 通过名字和动画添加到缓存
void addAnimation(Animation *animation, const std::string &name);

 

  • 从缓存中删除一个动画
void removeAnimation(const std::string &name);
  • 获得缓存中的动画
Animation * getAnimation(const std::string &name);
//返回一个之前添加的动画。 如果没有找到它将返回空。 如果你要使用它,你应该retain返回的这个拷贝

示例

    SpriteFrame * frame = nullptr;

    Vector<SpriteFrame *> frameVec;

    for (int i = 1; i < frameNum; i++)
    {
        frame = SpriteFrame::create(StringUtils::format("run%d.png", i), Rect(0, 0, 130, 130));
        frameVec.pushBack(frame);
    }

    Animation * ani = Animation::createWithSpriteFrames(frameVec);
    ani->setLoops(-1);
    ani->setDelayPerUnit(0.1f);

    Animate * ac = Animate::create(ani);

以上是关于Cocos2d-x 3.x序列帧动画的主要内容,如果未能解决你的问题,请参考以下文章

cocos2dx 3.x(实现帧动画(人物动画,跑马灯效果)的几种方法)

Unity自定义组件之序列帧播放组件

自己定义View时,用到Paint Canvas的一些温故,简单的帧动画(动画一 ,&quot;掏粪男孩Gif&quot;顺便再提提onWindowFocusChanged)(代码片段

Cocos2d-x3.3beta0创建动画的3种方式

unity shader序列帧动画代码,顺便吐槽一下unity shader系统

Unity 动画系列一 属性动画 序列帧动画