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_addChild02
static 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>

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

cocos2dx tolua传递参数分析的更多相关文章

  1. arm上的参数列表传递的分析(以android为例)

    1. Linux中可变列表实现的源码分析 查看Linux0.11的内核源代码,对va_list, va_start, va_arg 的实现如下: va_list的实现没有差别,chartypedef ...

  2. SpringMVC中使用Ajax POST请求以json格式传递参数服务端通过request.getParameter("name")无法获取参数值问题分析

    SpringMVC中使用Ajax POST请求以json格式传递参数服务端通过request.getParameter("name")无法获取参数值问题分析 一:问题demo展示 ...

  3. C++中三种传递参数方法的效率分析

    众所周知,在C++中有三种参数传递的方式: 按值传递(pass by value) #include <iostream> using namespace std; void swap(i ...

  4. 对线程等待函数pthread_join二级指针参数分析

    分析之前先搞明白,这个二级指针其实在函数内部是承接了上个线程的返回值. 看man手册,发现返回值是个普通指针.人家用二级指针来承接,可能准备干大事.这个可以自己搜索一下.原因嘛,二级指针是保存了这个地 ...

  5. Android解惑 - 为什么要用Fragment.setArguments(Bundle bundle)来传递参数(转)

    Fragment在Android3.0开始提供,并且在兼容包中也提供了Fragment特性的支持.Fragment的推出让我们编写和管理用户界面更快捷更方便了.   但当我们实例化自定义Fragmen ...

  6. js与php传递参数

    这个问题在网页开发时经常遇到,其实解决办法非常简单,就是几行代码的事,不过各种js.php书上都没有,百度下来也乱七八糟的,有的能用,有的不能用.小编遇到这问题时认认真真研究了一上午,研究出一点心得, ...

  7. 【WebApi系列】详解WebApi如何传递参数

    WebApi系列文章 [01]浅谈HTTP在WebApi开发中的运用 [02]聊聊WebApi体系结构 [03]详解WebApi参数的传递 [04]详解WebApi测试和PostMan [05]浅谈W ...

  8. JavaScript事件监听以及addEventListener参数分析

    事件监听 在Javascript中事件的监听是用来对某些操作做出反应的方法.例如监听一个按钮的pressdown, 或者获取鼠标左键按下时候鼠标的位置.这些都需要使用监听来完成.监听的函数很简单:ad ...

  9. SpringMVC札集(04)——SpringMVC传递参数

    自定义View系列教程00–推翻自己和过往,重学自定义View 自定义View系列教程01–常用工具介绍 自定义View系列教程02–onMeasure源码详尽分析 自定义View系列教程03–onL ...

随机推荐

  1. 什么是比特币(Bitcoin)?

    比特币是一种类型的电子货币.点对点(P2P)网络跟踪和验证交易.比特币系统不涉及金融机构,因此它不需要中央监控单元以控制该货币.它可以利用网络作为现金. 比特币系统 比特币是在处理称为区块(block ...

  2. 【原创】leetCodeOj --- Sliding Window Maximum 解题报告

    天,这题我已经没有底气高呼“水”了... 题目的地址: https://leetcode.com/problems/sliding-window-maximum/ 题目内容: Given an arr ...

  3. 配置jndi服务,javax.naming.NamingException的四种情况

    1.当jndi服务没有启动,或者jndi服务的属性没有设置正确,抛出如下异常: javax.naming.CommunicationException: Can't find SerialContex ...

  4. openstack dhcp调试

    openstack的dhcpserver默认值dnsmasq软件实施,经ps -ef | grep dnsmasq 查看.当虚拟机启动过程启动dhcp求,日志可以是在主机系统日志: May 23 22 ...

  5. 栈实现java

    栈是一种“先去后出”的抽象的数据结构.例如:我们在洗盘子的时候,洗完一个盘子,将其放在一摞盘子的最上面,但我们全部洗完后,要是有盘子时,我们会先从最上面的盘子开始使用,这种例子就像栈的数据结构一样,先 ...

  6. 神马是AB測试?

    手机响起了短信提示音,桂芬拿起手机,滑动解锁,看到是来福的短信,心里不禁一阵小鹿乱撞.     "喜欢看<冰封重生之门>吗?"     如此充满暗示意味的短信让桂芬激动 ...

  7. 基于ICSharpCode.SharpZipLib.Zip的压缩解压缩

    原文:基于ICSharpCode.SharpZipLib.Zip的压缩解压缩 今天记压缩解压缩的使用,是基于开源项目ICSharpCode.SharpZipLib.Zip的使用. 一.压缩: /// ...

  8. 使用 WPF 实现所见即所得HTML编辑器

    Introduction In this tip, you will learn the use of WPF webbrowser control and the use of the librar ...

  9. 【iOS】随机三角瓷砖布局算法

    你已经看够iOS鉴于这些默认的正方形块,整齐地显示? 本篇给出一个随机算法设计的三角布局的瓷砖和实施. 这样的规则,并提出妥协随机排列间.它看起来很凌乱,不会有一个新事物. 重点是设计和实施,以实现布 ...

  10. Lua 数据库访问(转)

    本文主要为大家介绍 Lua 数据库的操作库:LuaSQL.他是开源的,支持的数据库有:ODBC, ADO, Oracle, MySQL, SQLite 和 PostgreSQL. 本文为大家介绍MyS ...