使用骨骼動畫:函數
// 加載資源文件 png 圖片,plist 文件和 ExportJson 動畫文件,通常而言能夠在場景運行之初加載此資源動畫
CCArmatureDataManager::sharedArmatureDataManager()->addArmatureFileInfo("resTest/Hero/Hero.ExportJson");this
CCArmature* _pArrmature = CCArmature::create("Hero");spa
_pArrmature->getAnimation()->play("walk");//設置當前運行動畫的索引,一個「工程」能夠創建多個動畫code
_pArrmature->getAnimation()->setSpeedScale(0.1f);//修改骨骼動畫播放速度blog
_pArrmature->getAnimation()->setFrameEventCallFunc(this,frameEvent_selector(LoadingGongShiLayer::onFrameEvent));//添加骨骼動畫關鍵幀回調函數索引
_pArrmature->getAnimation()->setMovementEventCallFunc(this, movementEvent_selector(LoadingGongShiLayer::animationEvent));//添加骨骼動畫動做事件回調函數事件
this->addChild(_pArrmature);圖片
//播放完觸發事件 void LoadingGongShiLayer::animationEvent(CCArmature *armature, MovementEventType movementType, const char *movementID){ std::string id = movementID; CCSize size = CCDirector::sharedDirector()->getWinSize(); if (movementType == LOOP_COMPLETE) { if (id.compare("walk") == 0) { CCLOG("骨骼動畫行走結束"); } } }
//關鍵幀
void LoadingGongShiLayer::onFrameEvent(Bone *bone, const char *evt, int originFrameIndex, int currentFrameIndex) { if(strcmp(evt,"100") == 0) { CCLOG("響應事件");
} }
二、骨骼動畫屬性資源
string a = _pArrmature->getAnimation()->getCurrentMovementID();//獲取當前播放的動畫
int q = _pArrmature->getAnimation()->getCurrentFrameIndex();//獲取當前幀
CCArmature *m_pArmature = CCArmature::create(_pArrmature->getName().c_str());//建立一個新的骨骼動畫2
m_pArmature->getAnimation()->play(a.c_str());//骨骼動畫2播放骨骼動畫1正在播放的動做
m_pArmature->getAnimation()->gotoAndPlay(q);//骨骼動畫2播放骨骼動畫1正在播放的幀
三、爲骨骼動畫的一個骨骼添加粒子效果
//設置粒子
CCParticleSystem *p1 = CCParticleSystemQuad::create("resParticles/DR_gongji_bingjian_hd.plist"); //建立一個骨骼 CCBone *bone = cocos2d::extension::CCBone::create("p1"); //在新骨骼上面添加粒子效果 bone->addDisplay(p1, 0); bone->changeDisplayByIndex(0, true); bone->setIgnoreMovementBoneData(true); bone->setZOrder(100); bone->setScale(1.2f); _pArrmature->addBone(bone, "wuqi");//"wuqi"爲骨骼動畫中骨骼的名稱