cocos2dx csb文件的预加载

预加载资源一般放入缓存中,有异步和同步加载两种方式(一般针对plist大文件)
这些资料网上有各种博客讲解,大家一搜就能搜到。

可查看下这个帖子:http://www.cocoachina.com/bbs/read.php?tid=219154

加载csb:
CSLoader.h 头文件中
    static cocos2d::Node* createNode(const std::string& filename);//普通加载csb
    static cocos2d::Node* createNode(const std::string& filename, const ccNodeLoadCallback& callback);
    static cocos2d::Node* createNode(const Data& data);//预加载csb
    static cocos2d::Node* createNode(const Data& data, const ccNodeLoadCallback &callback);
可使用createNode(const Data& data)函数来达到预加载csb的作用。

使用步骤:
    const Data data = FileUtils::getInstance()->getDataFromFile("res/MainScene.csb");
    auto _node = CSLoader::createNode(data);
    this->addChild(_node);

缺点:需要一个全局变量来保存data数据。没图片预加载那么方便。但是自己控制内存也不错。


函数简介:
进入
createNode函数后,会指向:Node * CSLoader::createNode(const Data& data, const ccNodeLoadCallback &callback)
在它里面主要有4部分组成
1、
auto csparsebinary = GetCSParseBinary(data.getBytes()); //data数据转移到csparsebinary 中  
2、SpriteFrameCache::getInstance()->addSpriteFramesWithFile(textures->Get(i)->c_str());//加载资源
3、 node = loader->nodeWithFlatBuffers(csparsebinary->nodeTree(), callback);//csparsebinary数据转化成node数据

4、loader->reconstructNestNode(node);//重建node

C++中有这个方法,但lua中没有,尝试genbindings,FileUtils::getInstance()->getDataFromFile会报错,解决错误后, createNode(const Data& data, const ccNodeLoadCallback &callback)会断点,是否不支持lua?

if (argc == 2)
        {
            cocos2d::Data *arg0;
            ok &= luaval_to_object<cocos2d::Data>(tolua_S, 2, "cc.Data", &arg0, "cc.CSLoader:createNode");
            if (!ok) { break; }
            std::function<void(cocos2d::Ref *)> arg1;
            do {
                // Lambda binding for lua is not supported.
                assert(false);
            } while (0)
                ;
            if (!ok) { break; }
            cocos2d::Node* ret = cocos2d::CSLoader::createNode(*arg0, arg1);
            object_to_luaval<cocos2d::Node>(tolua_S, "cc.Node", (cocos2d::Node*)ret);
            return 1;
        }

lua调用createNode带回调函数的接口,回调函数不起作用,lua好像不支持
do {
                // Lambda binding for lua is not supported.
                assert(false);
            } while (0)
                ;  


阅读更多

没有更多推荐了,返回首页