DragonBonesData* DBCCFactory::loadDragonBonesData(const std::string &dragonBonesFilePath, const std::string &name) { DragonBonesData *existDragonBonesData = getDragonBonesData(name); if (existDragonBonesData) { return existDragonBonesData; } const auto &data = cocos2d::FileUtils::getInstance()->getDataFromFile(dragonBonesFilePath); if (data.getSize() == 0) { return nullptr; } // armature scale float scale = cocos2d::Director::getInstance()->getContentScaleFactor(); // load skeleton.xml using XML parser. dragonBones::XMLDocument doc; doc.Parse(reinterpret_cast<char*>(data.getBytes()), data.getSize()); // paser dragonbones skeleton data. dragonBones::XMLDataParser parser; DragonBonesData *dragonBonesData = parser.parseDragonBonesData(doc.RootElement(), scale); addDragonBonesData(dragonBonesData, name); return dragonBonesData; }
// 加载骨骼数据 DragonBonesData* DBCCFactoryEx::loadDotaDragonBonesData( Dota_Skeleton_Data& dotaSkeletonData, ITextureAtlas& textureAtlas, const std::string &name/* = ""*/) { DragonBonesData *existDragonBonesData = getDragonBonesData(name); if (existDragonBonesData) { return existDragonBonesData; } // armature scale float scale = cocos2d::Director::getInstance()->getContentScaleFactor(); DotaAnimParser parser; DragonBonesData *dragonBonesData = parser.parseDragonBonesData(dotaSkeletonData, textureAtlas, scale); addDragonBonesData(dragonBonesData, name); return dragonBonesData; }
bool DBCCFactory::hasDragonBones(const std::string &skeletonName, const std::string &armatureName, const std::string &animationName) { auto dragonbonesData = getDragonBonesData(skeletonName); if (!dragonbonesData) { return false; } if (!armatureName.empty()) { auto armatureData = dragonbonesData->getArmatureData(armatureName); if (!armatureData) { return false; } if (!animationName.empty()) { auto animationData = armatureData->getAnimationData(animationName); return animationData != nullptr; } } return true; }