cocos2d-x解析ccb及绑定到lua

要点一:C++解析ccb主要是这几个文件

CCBReader.h/cpp、CCNodeLoaderLibrary.cpp、CCNodeLoader.h/cpp等

CCBReader文件中的CCBReader::readNodeGraph方法是读取ccbi的节点(该方法应该看懂),该方法做的事有

1.读取该节点类型(自定义类型这里用到了)  
    /* Read class name. */
    std::string className = this->readCachedString();

2.节点名字memberVarAssignmentName

    // Read assignment type and name
    int memberVarAssignmentType = this->readInt(false);
    std::string memberVarAssignmentName;
    if(memberVarAssignmentType != kCCBTargetTypeNone) {
        memberVarAssignmentName = this->readCachedString();
    }
3.解析节点属性

    ...
    CCNodeLoader *ccNodeLoader = this->mCCNodeLoaderLibrary->getCCNodeLoader(className.c_str());
    if (! ccNodeLoader)
    {
        CCLog("no corresponding node loader for %s", className.c_str());
        returnNULL;
    }
    CCNode *node = ccNodeLoader->loadCCNode(pParent, this);
    ...
    // Read properties
    ccNodeLoader->parseProperties(node, pParent, this);
从上面3中可以得知mCCNodeLoaderLibrary为CCNodeLoaderLibrary.cpp类实例对象getCCNodeLoader(className.c_str())为获取对应的节点类型Loader实例对象。

要点:把CCB原有控件及事件绑定到Lua中(CCControlButton)

在CCNode * CCBReader::readNodeGraph(CCNode * pParent)方法最后加上以下代码

    //-------------------binding lua
    if (memberVarAssignmentName != "") {
        ZGLuaUtils::bindCCBAssign(memberVarAssignmentName.c_str(), className.c_str(), node);
    }
    //-------------------binding lua------end
我们看下C++中ZGLuaUtils类代码

void ZGLuaUtils::bindCCBAssign(constchar* assignmentName, constchar *className, CCNode* node) {
     lua_State *L = ((CCLuaEngine*)CCScriptEngineManager::sharedManager()->getScriptEngine())->getLuaStack()->getLuaState();
     lua_getglobal(L, "GF_setCCBBind");  
     /**//* Push PARAMETERS to STACK */
     tolua_pushstring(L, assignmentName);
     tolua_pushusertype(L, node, className);
     /**//* Call FUNCTION in LUA */ 
     int iError; 
     iError = lua_pcall(L,    //VMach
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值