这些资料网上有各种博客讲解,大家一搜就能搜到。
可查看下这个帖子: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)
;
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好像不支持
;