Cocos2dx杂记:cocos2dx 3.14.1 Spine 处理与 cocos2dx3.10 Spine的区别

一、在游戏中经常用到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将无法获取

Cocos2dx杂记:cocos2dx 3.14.1 Spine 处理与 cocos2dx3.10 Spine的区别_第1张图片

运行到如下标记的地方将导致程序崩溃
Cocos2dx杂记:cocos2dx 3.14.1 Spine 处理与 cocos2dx3.10 Spine的区别_第2张图片

Cocos2dx杂记:cocos2dx 3.14.1 Spine 处理与 cocos2dx3.10 Spine的区别_第3张图片

这里写图片描述

你可能感兴趣的:(cocos2dx,cocos2d-x,spine,游戏)