一、在游戏中经常用到Spine动画,在cocos2dx 3.10之前创建Spine动画可以采用
1、第一种方式
auto spine = SkeletonAnimation::createWithFile("spine.json", "spine.atlas");
但是当json文件过大时每次解析会消耗大量时间导致卡顿
2、第二种方式
//获得数据
spAtlas* _atlas = spAtlas_createFromFile("spine.atlas", 0);
spSkeletonJson* _json = spSkeletonJson_create(_atlas);
auto spData = spSkeletonJson_readSkeletonDataFile(_json , "spine.json");
//创建
auto spine = SkeletonAnimation::createWithData(spData);
第二种方式通过创建data避免多次解析json文件
二、cocos2dx 3.14.1 spine创建的区别
1、第一种方式
auto spine = SkeletonAnimation::createWithJsonFile("spine.json", "spine.atlas");
方法名称改为createWithJsonFile,同样当json文件过大时每次解析会消耗大量时间导致卡顿
2、第二种方式
//获得数据
spAtlas* _atlas = spAtlas_createFromFile("spine.atlas", 0);
auto _attachmentLoader = Cocos2dAttachmentLoader_create(_atlas );
spSkeletonJson* _json = spSkeletonJson_createWithLoader(&_attachmentLoader ->super);
auto spData = spSkeletonJson_readSkeletonDataFile(_json , "spine.json");
//创建
auto spine = SkeletonAnimation::createWithData(spData);
可以看出在获得data数据的时候变成了如下方式
auto _attachmentLoader = Cocos2dAttachmentLoader_create(_atlas );
spSkeletonJson* _json = spSkeletonJson_createWithLoader(&_attachmentLoader ->super);
我们来看一下库文件,可以看出数据获取的方式发生了改变
void SkeletonRenderer::initWithJsonFile (const std::string& skeletonDataFile, spAtlas* atlas, float scale) {
_atlas = atlas;
_attachmentLoader = SUPER(Cocos2dAttachmentLoader_create(_atlas));
spSkeletonJson* json = spSkeletonJson_createWithLoader(_attachmentLoader);
json->scale = scale;
spSkeletonData* skeletonData = spSkeletonJson_readSkeletonDataFile(json, skeletonDataFile.c_str());
CCASSERT(skeletonData, json->error ? json->error : "Error reading skeleton data.");
spSkeletonJson_dispose(json);
setSkeletonData(skeletonData, true);
initialize();
}
如果还是运用老的创建方式的话,可以正常编译,但是在运行的过程中
void SkeletonRenderer::draw (Renderer* renderer, const Mat4& transform, uint32_t transformFlags) 方法里面获得attachmentVertices->_triangles将无法获取
运行到如下标记的地方将导致程序崩溃