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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • virus.win32.parite.h病毒查杀

    virus.win32.parite.h病毒查杀virus.win32.parite.h病毒查杀第一步,病毒不会无缘无故的出现,一般是有病毒下载器(通常蛰伏在流氓软件中),或者是有后门病毒将这些病毒下载下来。用优化大师或金山或360都行,流氓软件清除工具(360插件扫描和***查杀中部分选项,注意不要一下子处理威胁,要选择流氓软件、后门项目处理)第二步,要下载两个专杀(绿盟有打包的,也可以自己一个个找)1、北信源Win32…

    2022年7月25日
    9
  • Linux下FTP的安装和登陆

    Linux下FTP的安装和登陆

    2021年10月19日
    36
  • 简述struts2拦截器的作用_拦截器什么时候被调用

    简述struts2拦截器的作用_拦截器什么时候被调用如何使用struts2拦截器,或者自定义拦截器。特别注意,在使用拦截器的时候,在Action里面必须最后一定要引用struts2自带的拦截器缺省堆栈defaultStack,如下(这里我是引用了struts2自带的checkbox拦截器): 0(必须加,否则出错)也可以改为对全局Action设置自己需要的拦截器,如下:在struts.xml里面定义全局的配置设

    2022年10月6日
    2
  • Linux终端删除文件夹命令「建议收藏」

    Linux终端删除文件夹命令「建议收藏」前言本文介绍Linux系统中删除文件夹的命令,包括:rmdir、rm。Linux系统下删除文件夹是一个非常高频的需求,有很多方法可以删除文件夹,比如使用图形界面,或者通过终端删除。本文将介绍在Linux命令行下使用命令删除文件夹。1.使用rmdir命令删除文件夹rmdir命令是英文单词removedirectory的缩写,主要作用是删除文件夹。但是请注意,该命令只能用于删除空文件夹,而如果文件夹非空的话,将会报错。$rmdirdatarmdir:fai..

    2022年7月13日
    41
  • 在线IEEE浮点二进制计算器工具「建议收藏」

    在线IEEE浮点二进制计算器工具「建议收藏」在线IEEE浮点二进制计算器工具在线IEEE浮点二进制计算器工具这是一个小计算器,旨在帮助您了解用于浮点计算的IEEE754标准。它是用JavaScript实现的,并且可以与Chrome和Firefox的最新桌面版本一起使用。我尚未在其他浏览器上进行过测试。如果您在左侧的三个框中之一中输入浮点数字,然后按Enter键,您将在右侧看到该数字的位模式。您可以输入使用通常在编程语言接受的语法,比如数字42,2.345,12E-3,等;您可以输入值NaN,Inf和-Inf直接;并且您还可以使用语法输入分

    2022年10月20日
    2
  • goland 激活码【最新永久激活】

    (goland 激活码)本文适用于JetBrains家族所有ide,包括IntelliJidea,phpstorm,webstorm,pycharm,datagrip等。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html…

    2022年3月28日
    758

发表回复

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

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