Cocos2d-x 3.x序列帧动画

 

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

简介

Animation

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

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

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

3 播放次数(loops)缓存

Animate

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

AnimationCache

建立好的Animation,能够加到缓存中,方便之后使用。它用于缓存的动画。若是你想在缓存中保存你的动画,你应该使用这个类。oop

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

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); 
相关文章
相关标签/搜索