cocos2d-x 2.x建立幀序列動畫

手動添加

手動添加的方法須要將每一幀要顯示的精靈有序添加到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

  • addSpriteFrame,添加精靈幀到Animation實例
  • setDelayUnits,設置每一幀持續時間,以秒爲單位
  • setRestoreOriginalFrame,設置是否在動畫播放結束後恢復到第一幀
  • clone,克隆一個該Animation實例

    

文件添加


/*加載圖片幀到緩存池*/

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對象*/

相關文章
相關標籤/搜索