手動添加的方法須要將每一幀要顯示的精靈有序添加到Animation類中,並設置每幀的播放時間,讓動畫可以勻速播放。另外,還要經過setRestoreOriginalFrame來設置是否在動畫播放結束後恢復到第一幀。建立好Animation實例後,須要建立一個Animate實例來播放序列幀動畫。 緩存
CCAnimation *animation = CCAnimation::create(); for (int i = 1; i <= 4; i++) { char szName[100] = {0}; sprintf(szName, "an1_anim%d.png", i); animation->addSpriteFrameWithFileName(szName); } animation->setDelayPerUnit(2.8f/14.0f); animation->setRestoreOriginalFrame(true); CCAnimate *action = CCAnimate::create(animation); CCSprite *sprite = CCSprite::create("an1_anim1.png"); sprite->setPosition(ccp(100, 100)); this->addChild(sprite); sprite->runAction(action);
在建立Animation實例時會用到如下幾個接口: oop
/*加載圖片幀到緩存池*/ CCSpriteFrameCache *frameCache = CCSpriteFrameCache::sharedSpriteFrameCache(); //3.x版本得到緩存池方法以下 //SpriteFrameCache *frameCache = SpriteFrameCache::getInstance(); frameCache->addSpriteFramesWithFile("scene1atlasiPhone.plist"); hero = CCSprite::createWithSpriteFrameName("sv_anim_10.png"); hero->setPosition(ccp(100, 100)); this->addChild(hero); int iFrameNum = 15; CCSpriteFrame *frame = NULL; CCArray *frameArray = CCArray::create(); /*用一個列表保存全部CCSpriteFrame對象*/ for (int i = 10; i <= 29; i++) { frame = frameCache->spriteFrameByName(CCString::createWithFormat("sv_anim_%d.png", i)->getCString()); frameArray->addObject(frame); } /*使用CCSpriteFrame列表建立動畫對象*/ CCAnimation *animation = CCAnimation::createWithSpriteFrames(frameArray); animation->setLoops(-1); animation->setDelayPerUnit(0.1f); CCAnimate *action = CCAnimate::create(animation); hero->runAction(action); /*從緩存池中獲取CCSpriteFrame對象*/