cocos2d-x 中LUA和平台之间的函数调用理解

先看一张流程图如下:

第一步:

   先把NDKHelper中的方法转成LUA中可以调用的,转得方法可参考quick中LUA的用法。这个类主要是中间桥梁的作用,它可以根据是什么平台调用IOSNDKHelper或者AndroidSNDKHelper,这些判断都是用C语言来写的。还有就是对一些回调函数的保存机制和平台要用LUA中一些方法的保存。

第二步:

   IOS平台需要处理的就是IOSNDKHelper,这个类主要就是接收和发送给NDKHelper数据的方法,还有一个就是加载IOS平台的BasePlatformHelper类和继承该类的子类。最后写不同SDK需要用到的方法,这个方法都是在 BasePlatformHelper的子类中写。这些方法是和LUA中对应的。完成后在初始化的时候把它和它的父类通过IOSNDKHelper加载到内存当中。

第三步:

   Android的处理方式和ios差不多,按照ios的思想写就可以。其中Android中需要AndroidSNDKHelper类,它的作用也就是接收和发送函数、参数到到NDKHelper中,还有就是加载Android中平台要用的方法到内存中。

第四部:

流程如下

    在LUA中调用sendMessageToNative方法时传入需要调用的方法和参数以及回调函数,在该方法中如果有回调函数的话,就把回调函数保存到内存当中,然后在调用C语言中得方法判断是IOS还是Android平台,如果是IOS平台的则就会调用IOSNDKHelper中的RecieveCPPMessage方法,RecieveCPPMessage这个方法会根据你传入的方法名和参数调用在平台上定义的方法。该方法执行完以后如果不需要返给调用者数据的话,这个流程就完成了,如果需要返给调用着数据的话,就把要反的数据和函数名通IOSNDKHelper类中 SendMessage方法传回去。在SendMessage方法中会把你传入的参数做处理然后在调用NDKHelper类中得HandleMessage方法,在HandleMessage中会根据你传入的方法名在内存中查找之前你传入的回调函数句柄,然后用参数和函数句柄根据LUA的处理方式调用LUA中对应的方法。Android的和ios的调用类似。

以上就是LUA中调用平台的方法流程。

    平台把调用LUA中的方法时就是把调用的方法和参数通过 IOSNDKHelper和AndroidSNDKHelper 传给NDKHelper,NDKHelper通过处理后调用LUA 方法。

以上就是个人的一点理解,有理解错误的地方希望大牛给予指点。

cocos2d-x 中LUA和平台之间的函数调用理解,布布扣,bubuko.com

时间: 2024-12-25 20:05:34

cocos2d-x 中LUA和平台之间的函数调用理解的相关文章

java设计模式、框架、架构、平台之间的关系

    设计模式<框架<架构<平台,从复用角度讲,设计模式是代码级复用.框架是模块级复用.架构是系统级复用.平台是企业应用级复用. 1.设计模式 为什么要先说设计模式?因为设计模式在这些概念中是最基本的,而且也比较简单.那么什么是设计模式呢?说的直白点,设计模式就是告诉你针对特定问题如何组织类.对象和接口之间的关系,是前人总结的经验.比如我要在代码中实现一个全局唯一的配置类,那么就使用Singleton模式.设计模式在实际编码工作和设计框架时会被使用到,而更高层的架构和平台则不会太关注它

C++中数字与字符串之间的转换,别人的,

C++中数字与字符串之间的转换 1.字符串数字之间的转换 (1)string --> char *   string str("OK");   char * p = str.c_str(); (2)char * -->string   char *p = "OK";   string str(p); (3)char * -->CString    char *p ="OK";   CString m_Str(p);   //或者

cocos2d-x android环境中lua脚本的io操作

因为android的安装包安装之后,是以压缩文件的形式存储.故在lua脚本中,直接使用io操作(如:io.open等)是无法找到文件的(ios和windows平台无此问题). 在论坛中找到一个解决办法http://www.cocoachina.com/bbs/read.php?tid=198542 原理是在lua中调用CCString:createWithContentsOfFile方法,使用c++代码去打开文件.具体代码: local str = CCString:createWithCont

Android中Fragment和Activity之间的互操作代码例子

摘要 本文介绍了Android中一个Activity中有多个Fragment的情况下,Fragment之间如何通过Activity进行互操作. 源代码 源代码地址为:http://download.csdn.net/detail/logicteamleader/8931199 源代码使用ADT编写,ADT版本为2014,Android版本为android-22. 技术要点 1.在Activity中的多个Fragment之间要互操作,一定要通过此Activity,不能直接通信: 2.在Activi

项目中lua(基础)

关于项目中lua任务(某些没弄懂,但lua上耗费时间有点长了不看了) 这段时间看了lua语法和项目中lua应用 1.在lua中注册c库,在lua5.2中好像都是注册c库,相当于在lua中定义一个table,key是函数名字,value是函数指针 m_spLuaState->RegLib("game", funcs); 2.加载项目中所有lua并执行 刚开始不知道那个dofile具有执行lua的功能,结果是返回0表示成功,执行lua就是执行其中定义的一些函数和全局变量(普通变量,表

JavaScript中this和$(this)之间的区别

jQuery中this和$(this)之间的区别: this返回的是当前对象的html对象,而$(this)返回的是当前对象的jQuery对象 举个正确的Demo实例: $("#textbox").hover( function() { this.title = "Test"; }, fucntion() { this.title = "OK”; } ); 以上的this为html元素即元素textbox,该元素有title属性,因此以上的程序没有错误.如

TCP中close和shutdown之间的区别

该图片截取自<<IP高效编程-改善网络编程的44个技巧>>,第17个技巧. 如果想验证可以写个简单的网络程序,分别用close和shutdown来断开连接,然后用tcpdump查看交互过程,就一目了然了.本来我想自己写个程序验证,但是自己笔记本上没有linux环境,公司环境又不能通外网,所以就放弃了. TCP中close和shutdown之间的区别,布布扣,bubuko.com

nginx中lua脚本输出

在nginx中嵌入lua模块,能够使得nginx服务端的开发大大地方便,尤其是在实现一些额外的统计等小功能的时候.在nginx模块中直接lua嵌入脚本文件,可以直接使用nginx中lua模块的一些函数直接返回数据.可以调用的函数如下:ngx.say(),ngx.print(),return ,ngx.exit()等等,下面介绍一下这些函数的区别: (1)ngx.say()函数是返回该函数的参数加换行的数据,例如ngx.say("hello"),则返回数据hello/r/n, (2)ng

php中mysql_fetch_row() 和mysql_fetch_array之间有什么区别

mysql_fetch_row是从结果集取出1行数组,作为枚举 mysql_fetch_array是从结果集取出一行数组作为关联数组,或数字数组,两者兼得eg:$sql="select abc,def from a";$res=mysql_query($sql); 那么:$row=mysql_fetch_row($res);$row结果是两个:$row[0]和$row[1]那么:$row=mysql_fetch_array($res);$row结果是4个:$row[0].$row[1]