cocos2d-x骨骼动画使用


注意:使用骨骼动画最好使用NDKr10d,使用r9d在android5.0以上手机运行不了,使用r10d编译可能会报以下错误:
requires unsupported dynamic reloc R_ARM_REL32; recompile with -fPIC

解决方法:在Application.mk中,将前面两句改为:  APP_STL := gnustl_static
NDK_TOOLCHAIN_VERSION=4.8


一、加入Dragonbones支持


二、加载文件

DBCCFactory::getInstance()->loadDragonBonesData("fileName/skeleton.xml", "fileName");
DBCCFactory::getInstance()->loadTextureAtlas("fileName/texture.xml", "fileName");

三、调用动画

        DBCCArmatureNode * _armatureNode = nullptr;
this->setOpacity(0);//原来的设置不可见
if(this->getChildByName(ARMATURENODE)){
dynamic_cast<DBCCArmatureNode*>(this->getChildByName(ARMATURENODE))->getAnimation()->gotoAndPlay("动作名称");
}else {
_armatureNode = DBCCFactory::getInstance()->buildArmatureNode("fla_tianshu");
_armatureNode->setName(ARMATURENODE);
_armatureNode->setScale(0.5);
_armatureNode->setPosition(_VEC2(33, 42));//设置位置
this->addChild(_armatureNode);
_armatureNode->getAnimation()->gotoAndPlay("z_stand");
}
if(_armatureNode){
_armatureNode->getCCEventDispatcher()->addCustomEventListener(EventData::COMPLETE, CC_CALLBACK_1(eventHandler, this));//非循环动作结束监听
_armatureNode->getCCEventDispatcher()->addCustomEventListener(EventData::LOOP_COMPLETE, CC_CALLBACK_1(eventHandler, this));//循环动作结束监听
}

四、监听动作结束

void eventHandler(EventCustom *event)
{
char *stands[] = {"z_stand", "z_stand_b"};
EventData *eventData = (EventData*)(event->getUserData());
if (eventData){
DBCCArmatureNode * _armatureNode = dynamic_cast<DBCCArmatureNode*>(this->getChildByName(ARMATURENODE));
if(!_armatureNode){
CCASSERT(_armatureNode != nullptr, "_armatureNode is null");
return ;
}
switch(eventData->getType()){
case EventData::EventType::COMPLETE:{
if(this->getEnemyType()==EnemyType8){
if(eventData->animationState->name.compare("z_walk") == 0){
if(this->gethandState()==HandTypeLeft){
_armatureNode->getAnimation()->gotoAndPlay("z_skill_z");
}else if(this->gethandState()==HandTypeRight){
_armatureNode->getAnimation()->gotoAndPlay("z_skill_y");
}else{
_armatureNode->getAnimation()->gotoAndPlay("z_stand");
}
}else if(eventData->animationState->name.compare("z_skill_z") == 0||eventData->animationState->name.compare("z_skill_y") == 0||eventData->animationState->name.compare("z_dizzy_over")==0){
_armatureNode->getAnimation()->gotoAndPlay("z_stand");
}
}else{
if(eventData->animationState->name.compare("z_walk") == 0||eventData->animationState->name.compare("z_dizzy_over")==0){
_armatureNode->getAnimation()->gotoAndPlay("z_stand");
}
if(eventData->animationState->name.compare("z_stand_e_z") == 0||eventData->animationState->name.compare("z_stand_e_y") == 0||eventData->animationState->name.compare("z_stand_e_ting_y") == 0||eventData->animationState->name.compare("z_stand_e_ting_z") == 0){
_armatureNode->getAnimation()->gotoAndPlay("z_stand");
this->setchattingState(ChatType0);//修改聊天状态
}
if(eventData->animationState->name.compare("z_skill_start_b")==0){
_armatureNode->getAnimation()->gotoAndPlay("z_skill_start_c");
}
}
}break;
case EventData::EventType::LOOP_COMPLETE:{
if(eventData->animationState->name.compare("z_stand_c")==0){
NotificationCenter::getInstance()->postNotification(Enemy_FALL_WATER, this);
}else if(this->getEnemyState() != EnemyState2&&eventData->animationState->name.compare("z_target") != 0){
int index = rand()%10;
if(index==1){
_armatureNode->getAnimation()->gotoAndPlay(stands[index]);
}else{
_armatureNode->getAnimation()->gotoAndPlay(stands[0]);
}
}
if(eventData->animationState->name.compare("z_skill_start_c")==0){
_armatureNode->getAnimation()->gotoAndPlay("z_skill_start_c");
}


}break;
}




}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值