天天看點

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", ); 
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", );
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的差別

運作到如下标記的地方将導緻程式崩潰

Cocos2dx雜記:cocos2dx 3.14.1 Spine 處理與 cocos2dx3.10 Spine的差別
Cocos2dx雜記:cocos2dx 3.14.1 Spine 處理與 cocos2dx3.10 Spine的差別
Cocos2dx雜記:cocos2dx 3.14.1 Spine 處理與 cocos2dx3.10 Spine的差別

繼續閱讀