cocos2d-x : csb的加载
生活随笔
收集整理的這篇文章主要介紹了
cocos2d-x : csb的加载
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
cocos2d-x : csb的加載
csb的加載時通過 CSLoader 類加載的
先看 CSLoader.h 簡單介紹幾個函數
class CC_STUDIO_DLL CSLoader
{
public:// 通過csb文件名 創建節點 例如:cocos2d::CSLoader::createNode("aaa.csb");static cocos2d::Node* createNode(const std::string& filename);// 通過文件名 創建時間線 序列幀 例如:cocos2d::CSLoader::createTimeline("aaa.csb");static cocostudio::timeline::ActionTimeline* createTimeline(const std::string& filename);// 通過json文件名 創建節點 例如:cocos2d::CSLoader::createNode("aaa.csb");cocos2d::Node* createNodeFromJson(const std::string& filename);// 從文件中 獲取到數據 buffer 初始化textures要用到的testure都放入SpriteFrameCache里// 獲得NodeTreecocos2d::Node* createNodeWithFlatBuffersFile(const std::string& filename);// 將nodeTree里的節點遞歸調用此方法渲染出來cocos2d::Node* nodeWithFlatBuffers(const flatbuffers::NodeTree* nodetree, const ccNodeLoadCallback &callback);// load nodescocos2d::Node* loadSimpleNode(const rapidjson::Value& json);cocos2d::Node* loadSubGraph (const rapidjson::Value& json);cocos2d::Node* loadSprite (const rapidjson::Value& json);cocos2d::Node* loadParticle (const rapidjson::Value& json);cocos2d::Node* loadTMXTiledMap(const rapidjson::Value& json);// load guicocos2d::Node* loadWidget(const rapidjson::Value& json);// load componentcocos2d::Component* loadComponent(const rapidjson::Value& json);cocos2d::Component* loadComAudio(const rapidjson::Value& json);bool isWidget(const std::string& type);bool isCustomWidget(const std::string& type);// 獲得渲染節點的類名std::string getGUIClassName(const std::string &name);// 獲得WidgetReader渲染器的類名std::string getWidgetReaderClassName(cocos2d::ui::Widget *widget);
};
先看 CSLoader.h 簡單介紹幾個函數
代碼里面加載csb
cocos2d::Node* root = cocos2d::CSLoader::createNode("aaa.csb");createNodeWithFlatBuffersFile(filename);createNodeWithFlatBuffersFile(filename, nullptr);nodeWithFlatBuffersFile(filename, callback);Node* CSLoader::nodeWithFlatBuffersFile(const std::string &fileName, const ccNodeLoadCallback &callback) {std::string fullPath = FileUtils::getInstance()->fullPathForFilename(fileName);CC_ASSERT(FileUtils::getInstance()->isFileExist(fullPath));// 通過FileUtils類讀取 csb里的內容保存到data中 里面使用的是文件操作打開文件、讀取文件、關閉文件Data buf = FileUtils::getInstance()->getDataFromFile(fullPath);auto csparsebinary = GetCSParseBinary(buf.getBytes()); 【1】auto csBuildId = csparsebinary->version();if (csBuildId){}// decode plistauto textures = csparsebinary->textures();int textureSize = textures->size();for (int i = 0; i < textureSize; ++i){SpriteFrameCache::getInstance()->addSpriteFramesWithFile(textures->Get(i)->c_str());}Node* node = nodeWithFlatBuffers(csparsebinary->nodeTree(), callback); 【2】return node; }【1】解析: GetCSParseBinary(buf.getBytes()) 此方法是在CSParseBinary_generated.h文件里的
inline const flatbuffers::CSParseBinary *GetCSParseBinary(const void *buf) {return flatbuffers::GetRoot<flatbuffers::CSParseBinary>(buf); } // 此方法會返回一個結構體 struct CSParseBinary FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {enum {VT_VERSION = 4,VT_TEXTURES = 6,VT_TEXTUREPNGS = 8,VT_NODETREE = 10,VT_ACTION = 12,VT_ANIMATIONLIST = 14};const flatbuffers::String *version() const { return GetPointer<const flatbuffers::String *>(VT_VERSION); }const flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>> *textures() const { return GetPointer<const flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>> *>(VT_TEXTURES); }const flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>> *texturePngs() const { return GetPointer<const flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>> *>(VT_TEXTUREPNGS); }const NodeTree *nodeTree() const { return GetPointer<const NodeTree *>(VT_NODETREE); }const NodeAction *action() const { return GetPointer<const NodeAction *>(VT_ACTION); }const flatbuffers::Vector<flatbuffers::Offset<AnimationInfo>> *animationList() const { return GetPointer<const flatbuffers::Vector<flatbuffers::Offset<AnimationInfo>> *>(VT_ANIMATIONLIST); }bool Verify(flatbuffers::Verifier &verifier) const {return VerifyTableStart(verifier) &&VerifyField<flatbuffers::uoffset_t>(verifier, VT_VERSION) &&verifier.Verify(version()) &&VerifyField<flatbuffers::uoffset_t>(verifier, VT_TEXTURES) &&verifier.Verify(textures()) &&verifier.VerifyVectorOfStrings(textures()) &&VerifyField<flatbuffers::uoffset_t>(verifier, VT_TEXTUREPNGS) &&verifier.Verify(texturePngs()) &&verifier.VerifyVectorOfStrings(texturePngs()) &&VerifyField<flatbuffers::uoffset_t>(verifier, VT_NODETREE) &&verifier.VerifyTable(nodeTree()) &&VerifyField<flatbuffers::uoffset_t>(verifier, VT_ACTION) &&verifier.VerifyTable(action()) &&VerifyField<flatbuffers::uoffset_t>(verifier, VT_ANIMATIONLIST) &&verifier.Verify(animationList()) &&verifier.VerifyVectorOfTables(animationList()) &&verifier.EndTable();} };【2】解析:遞歸調用nodeWithFlatBuffers(csparsebinary->nodeTree(), callback);把所有的節點渲染出來
渲染類
【3】解析:createNodeWithFlatBuffers
比如NodeReader渲染器
總結
以上是生活随笔為你收集整理的cocos2d-x : csb的加载的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python 扫描二维码
- 下一篇: 基于vmdk文件创建虚拟机