cocos2dx tolua传递参数分析

cocos2dx tolua传递参数分析

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

cocos2dx tolua传递参数分析:
tolua_Cocos2d_CCNode_addChild00  == void CCNode::addChild(CCNode *child)
tolua_Cocos2d_CCNode_addChild01  == void CCNode::addChild(CCNode *child, int zOrder)
tolua_Cocos2d_CCNode_addChild02  == void CCNode::addChild(CCNode *child, int zOrder, int tag)

上面是使用tolua把C++转到lua。上面三个分别相应不同的參数个数。

我们这里分析一下最后一个:/* method: addChild of class CCNode */#ifndef TOLUA_DISABLE_tolua_Cocos2d_CCNode_addChild02static int tolua_Cocos2d_CCNode_addChild02(lua_State* tolua_S){ tolua_Error tolua_err; //这里推断參数是否合法,仅仅能推断參数类型是否合法。假设參数类型检查不通过,就会报错 if ( !tolua_isusertype(tolua_S,1,"CCNode",0,&tolua_err) || !tolua_isusertype(tolua_S,2,"CCNode",0,&tolua_err) || !tolua_isnumber(tolua_S,3,0,&tolua_err) || !tolua_isnumber(tolua_S,4,0,&tolua_err) || !tolua_isnoobj(tolua_S,5,&tolua_err) ) goto tolua_lerror; else { //比如:middleBg:addChild(testSprite, Z_ORDER_1, 200) //我们传递进来的參数和以下的一一相应 //这里能够清楚的看到传入參数的次序,第一是middleBg ... CCNode* self = (CCNode*) tolua_tousertype(tolua_S,1,0); -- middleBg -- 1 CCNode* child = ((CCNode*) tolua_tousertype(tolua_S,2,0)); -- testSprite -- 2 int zOrder = ((int) tolua_tonumber(tolua_S,3,0)); -- Z_ORDER_1 -- 3 int tag = ((int) tolua_tonumber(tolua_S,4,0)); -- 200 -- 4#ifndef TOLUA_RELEASE if (!self) tolua_error(tolua_S,"invalid 'self' in function 'addChild'", NULL);#endif { //这里就把testSprite加到了middleBg self->addChild(child,zOrder,tag); } } return 0;tolua_lerror: return tolua_Cocos2d_CCNode_addChild01(tolua_S);}#endif //#ifndef TOLUA_DISABLE样例://middleBg:addChild(testSprite, Z_ORDER_1, 200) 在传递參数中,我们没有对Z_ORDER_1赋值,即为nil,则就//出现了以下的错误。看下这里argument #3 ,表明是第三个參数错误,而这里我们明明是第二个參数。看下上面的分析//我想大家应该明确了。通过这样的方法,我们以后查找这类问题。就会方便非常多。

03-31 10:09:50.499: D/cocos2d-x debug info(3169): LUA ERROR: [string "xxxxxxxxxxxxx..."]:171: error in function 'addChild'.03-31 10:09:50.499: D/cocos2d-x debug info(3169): argument #3 is 'nil'; '[no object]' expected.03-31 10:09:50.499: D/cocos2d-x debug info(3169): stack traceback:03-31 10:09:50.499: D/cocos2d-x debug info(3169): [C]: in function 'addChild'03-31 10:09:50.499: D/cocos2d-x debug info(3169): [string "xxxxxxxxxxxxx..."]:171: in function 'initMiddle'03-31 10:09:50.499: D/cocos2d-x debug info(3169): [string "xxxxxxxxxxxxx..."]:35: in function 'initUI'03-31 10:09:50.499: D/cocos2d-x debug info(3169): [string "xxxxxxxxxxxxx..."]:27: in function 'ctor'03-31 10:09:50.499: D/cocos2d-x debug info(3169): [string "xxxxxxxxxxxxx"]:34: in function 'create'03-31 10:09:50.499: D/cocos2d-x debug info(3169): [string "xxxxxxxxxxxxx"]:38: in function 'new'03-31 10:09:50.499: D/cocos2d-x debug info(3169): [string "xxxxxxxxxxxxx"]:44: in function 'pushScene'03-31 10:09:50.499: D/cocos2d-x debug info(3169): [string "xxxxxxxxxxxxx"]:309: in function 'callBack'03-31 10:09:50.499: D/cocos2d-x debug info(3169): [string "xxxxxxxxxxxxx"]:653: in function <[string "xxxxxxxxxxxxx"]:651>

版权声明:原创文章,转载请注明出处。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/117191.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • padEnd_np.pad函数

    padEnd_np.pad函数ES2017引入了字符串补全长度的功能。如果某个字符串不够指定长度,会在头部或尾部补全。padStart()用于头部补全,padEnd()用于尾部补全下面有一个小练习身份号只显示后四位

    2022年9月8日
  • 金山词霸2007升级v10.0.0.4

    金山词霸2007升级v10.0.0.4词霸2007不但产品功能更加完善,而且在用户的体验方面也做了很多改进。首先,词霸07收录了150余本权威词典,70余个专业词库,同时支持28种常备资料线实时更新,让您随时拥有奥运知识、常用工具(货币单位等)等最新的资料;其次全面支持简体中文、英文、日文查词功能,满足更多用户需求;值得一提的是,词霸07收录了与朗文、牛津、韦氏齐名四大词典的《美国传统词典》最新版,英汉、英英双解,包含96000余词条

    2022年7月15日
  • iOS多用连接、反向协议、安全

    iOS多用连接、反向协议、安全

    2022年1月11日
  • Codeforces 432 D. Prefixes and Suffixes

    Codeforces 432 D. Prefixes and Suffixes

    2022年1月14日
  • 推荐5款好用的Java软件,初学者必看「建议收藏」

    推荐5款好用的Java软件,初学者必看「建议收藏」“工欲善其事必先利其器”,想要学好Java,除了要有好的学习资源之外,还要有一套适合自己的Java软件,好的软件能极大提高你的学习和工作效率。那么,学Java用什么软件好呢?下面小千为大家推荐5款好用的Java软件。

    2022年7月7日
  • 快捷方式图标变白完美解决方法_应用程序图标显示空白

    快捷方式图标变白完美解决方法_应用程序图标显示空白annotation:explorer.exe是Windows程序管理器或者文件资源管理器,它用于管理Windows图形壳,包括桌面和文件管理,删除该程序会导致Windows图形界面无法使用解决方式:把图标缓存的数据库删除第一步:win+rcmd进入命令行第二步:一行一行键入如下命令taskkill/imexplorer.exe/fcd/d%u…

    2022年10月18日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号