cocos2dx-3.7 lua绑定部分学习记录

                 http://cn.cocos2d-x.org/tutorial/show?id=2496(官网)
                 http://blog.csdn.net/playddt/article/details/43269091(cocosbuilder中lua callback修改)
好不容易闲下来,乘机好好看了看cocos引擎源码。发现3.7lua绑定部分确实方便了好多(相比较前面一些旧的版本)。本着不仅要知其然,还要知其所以然的精神,耐心的阅读了相关部分的代码和源码。

对于旧版本lua绑定操作步骤(拿来主义--照抄):

1,创建自己的类(当然)

2,为了以后创建用来与lua交互的中间类MyCToL.cpp(先不创建),先创建他的头文件MyCToL.h

3,创建总的pkg文件

4,为要添加的新类创建pkg文件

5,用cmd编译一下

6,在AppDelegate.cpp中添加一行代码,注册一下

(具体实现参照上面链接)

但是对于新版的就不用这么麻烦啦。。。。(这个我喜欢,啊哈哈)
在开始例子说明之前我们先来理一理cocos2dx中lua绑定一块的调用。新版的工程以预编译库的形式将引擎加入到工程中,这样工程编译运行的速度大大提高了啊(再也不用苦等了^_^).通过cocos(版本v2.3.1.2)新建工程,发布为lua工程,打开后发现没有引擎相关代码了:
打开src/main.lua 发现有这两个 ,继续浏览这两个文件,前者是配置文件,后者都是一些require,完成cocos-lua的一些初始工作,注意末尾部分:
应该就是我们类似quick的一个缩略版本的初始入口了...
看到这里还是没有发现引擎相关部分库是如何加载进入工程的。用Sublime Text(好用的工具啊)打开工程,
进入framework下平台相关的部分,我的是win32,所以打开mian.cpp,看到这一系列#pragma comment,顿时松了口气,不然要哭了。。。。

但是这里就有一个疑问了,这些lib_2013,lib_2015 又是怎么来的呢。。。。用vs2013打开下frameworks/cocos2dx 3.7 :
一个个查看了下属性,libcocos2d(.dll)引用到了External下4个静态库(.lib),而libluacocos2d(.lib)则应用了libcocos2d.这样关系就一目了然了哈。关于c++动态库,静态库相关知识可以参考这篇文章:
待我编译之后发现E:\cocos\frameworks\cocos2d-x-3.7\build\Debug.win32目录下根本看不到相关的一些库文件。
马上又去官网上看了相关文档(官网文档还是很有帮助的),才了解清楚。frameworks下有两个文件夹
prebuilt:预编译库存放位置,工程可以直接引用啊。。。。(如果为空的话,继续下看)
simulator:各种平台模拟器存放位置。。(cocosIDE中改变项目调配设置中模拟器位置目录就可以指向    自定义模拟器啦。)

到目前为止,我还是没有发现各个版本的lib库文件时怎么改名字的。所以继续看lua绑定相关脚本文件:

关于这两个文件,官网上有用法(具体用法去官网看文档):
我们要看的是lib_2013,lib_2015如何来的,所以打开gen_cocos_libs.py:
发现里面果然有名字的修改:
 
好了这下了解了吧。。。。但是那个rename_targets又是哪里来的呢。。。
打开这个json文件就发现了。果然藏在这里:


到这里,完成第一部分分析。可以喝杯咖啡休息会了啊。。啊哈哈

接下来就是lua绑定那块怎么加到项目的了啊 :
前者就是注册相关模块了,后面就是lua主程序入口。
打开改文件下lua_module_register.h :
这下一目了然了吧。这里就是将我们前面导出的相关lua模块注册到lua环境的地方。
这里发现我们注册的这样函数引用的都是cocosframes/cocos2d-x-3.7/cocos/scripting/manual下相关文件。拿cocosbuilder模块来说明吧。(后面例子会用到的)
打开该文件下lua_cocos2dx_cocosbuilder_manual.cpp:
这里就实现了对lua自动导出(lua自动导出模块在auto文件下)lua模块的注册,以及自定义模块或者扩展模块的注册工作。(_ex就是后面添加的)

接下来就以一个例子来说明下lua导出的具体操作
1.自动导出:
比如修改了底层代码,或者增加了相关函数,然后vs直接编译库就行了,接下来就交给tolua工具啦--执行genbindings.py即可
(具体操作,官方教程写了不能再详细啦)最后导出的文件在auto目录下(如果你没有修改genbindings.py下导出路径的话)
关于自动导出的ini文件有一个地方注意下:
这里是一些跳过导出的一些函数列表。如果你在导出的文件中没有看到接口,可以在这里去掉相关类的跳过函数。然后运行 genbindings.py即可。如果还是没有,那就只能手动添加了啊。。。因为有些函数是不支持的啊。。。啊。。  

2.手动导出
以CCB执行完回调函数导出为例子:
     1.在frameworks/cocos2dx 3.7工程中添加以下四个文件:
        
    这四个文件下载链接(也可参战上面的链接博客,那里写的也比较详细): http://download.csdn.net/detail/milie_xw/9043243
    2.在lua_cocos2dx_cocosbuilder_manual.cpp中添加对lua_cocos2dx_cocosbuilder_ex的引用和以下代码
         

3.执行tools/framework-compile下gen_cocos_libs.py和gen_cocos_simulator.py,生产相应的预编译库和模拟器即可。
4.在cocoside中修改项目调配设置中模拟器位置,指向新生成的模拟器,然后代码中调用就可以啦。。。 啊哈哈  


    
                
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值