我有一个dragonbones 导出的动画,动画文件和 纹理文件都是json,在creator里面可以直接拖放进去播放,但是原生代码用哪个类去加载这2个文件,并播放。
尝试了一下 ArmatureDataManager,不能正常解析。官方列子也没看见哪里有, 倒是 ExportJson 格式的骨骼文件能播放
给你一个3.15下的代码参考一下吧,我也不知道在3.13下面行不行。
假设自定义的一个层GameLayer,部分代码省略,
GameLayer.h
class GameLayer : cocos2d::Layer
{
// ... 省略部分代码
private:
dragonBones::Armature* _armature;
dragonBones::CCArmatureDisplay* _armatureDisplay;
dragonBones::DragonBonesData* _dragonBonesData;
// 这里不是指针
dragonBones::CCFactory _factory;
private:
void playAnimation(const std::string& animationName);
}
GameLayer.cpp
bool GameLayer::init()
{
// ... 省略部分代码
// 加载骨骼数据文件
_dragonBonesData = _factory.loadDragonBonesData("res/something_ske.json");
// 加载材质文件
_factory.loadTextureAtlasData("res/something_tex.json");
if (_dragonBonesData)
{
playAnimation("action01");
}
else
{
assert("Failed loading res/something.json");
}
return true;
}
void GameLayer::playAnimation(const std::string& animationName)
{
const auto& armatureNames = _dragonBonesData->getArmatureNames();
if (armatureNames.empty())
{
return;
}
const auto& armatureName = armatureNames[0];
_armatureDisplay = _factory.buildArmatureDisplay(armatureName);
_armature = _armatureDisplay->getArmature();
const auto center = Director::getInstance()->getVisibleSize() * 0.5f;
_armatureDisplay->setPosition(center);
this->addChild(_armatureDisplay);
_armatureDisplay->getAnimation().play(animationName);
}
摘出来的代码,没试过有没有问题,但流程就是这样了。
其实具体的看github上dragonbones的示例代码就够了,虽然其中有几个的资源文件有问题,运行不了,不过换成自己制作的动画资源就可以了。