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); 
相關文章
相關標籤/搜索