1. 程式人生 > >Cocos2d-x 3.x序列幀動畫

Cocos2d-x 3.x序列幀動畫

vector 序列幀 bash cpp ams with 序列 object -s

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序列幀動畫