Cocos2d-x 3.x序列幀動畫
阿新 • • 發佈:2018-05-10
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序列幀動畫