Spine预加载

求大神指点 项目中所有的骨骼动画输出到了一个文件 在调用m_skelte = spine::SkeletonAnimation::createWithFile时会卡很久 请问该如何处理?是否有能预加载?

我把我的给你吧
// 好处就是相同的 spine 不用再加载。
FAnimSpine 是我自己封装的,你可以自己封装下,即可
FAnimSpineCache::FAnimSpineCache()
{

}

FAnimSpineCache::~FAnimSpineCache()
{
ClearCache();
}

FAnimSpineCache* FAnimSpineCache::GetInstance()
{
if(nullptr==ms_animSpineCache)
{
ms_animSpineCache = new FAnimSpineCache();
}
return ms_animSpineCache;
}

FAnimSpine* FAnimSpineCache::Create(std::string FullPath,std::string Json,std::string Atlas)
{
spSkeletonData* skeletonData = GetSkeletonData(FullPath,Json,Atlas);
if(nullptr==skeletonData)
return nullptr;

FAnimSpine* anim = FAnimSpine::create();
anim->setCascadeOpacityEnabled(true);
anim->m_skeletonAnim = SkeletonAnimation::createWithData(skeletonData);
anim->m_skeletonAnim->setCascadeOpacityEnabled(true);
anim->addChild(anim->m_skeletonAnim);

return anim;

}
// 退出游戏,或者关卡结束释放。
void FAnimSpineCache::ClearCache()
{
map<string,spSkeletonData*>::iterator it = m_animDataTable.begin();
for(;it!=m_animDataTable.end();it++)
{
spSkeletonData* p = it->second;
spSkeletonData_dispose§;
}
m_animDataTable.clear();
}
// 如果缓存,则不重新加载。
spSkeletonData* FAnimSpineCache::GetSkeletonData(std::string FullPath,std::string Json,std::string Atlas)
{
std::string pathJson = FullPath + Json;
std::string pathAtlas = FullPath + Atlas;

map<string,spSkeletonData*>::iterator it = m_animDataTable.find(pathJson);
if(it!=m_animDataTable.end())
{
    return it->second;
}
spAtlas* _atlas = spAtlas_createFromFile(pathAtlas.c_str(),0);
CCASSERT(_atlas,"Error reading atlas file.");

spSkeletonJson* json = spSkeletonJson_create(_atlas);
spSkeletonData* skeletonData = spSkeletonJson_readSkeletonDataFile(json,pathJson.c_str());
CCASSERT(skeletonData,json->error ? json->error : "Error reading skeleton data file.");
spSkeletonJson_dispose(json);

m_animDataTable.insert(map<string,spSkeletonData*>::value_type(pathJson,skeletonData));
return skeletonData;

}

我看代码,也就能做到这一步了。

非常感谢:14: