cocos2dx 3.x tolua 分析
cocos2dx 3.x 版本已经出到3.10了,终于决定要进行引擎版本升级,c++配合lua进行游戏开发,从3.x版本开始cocos使用了新的tolua方式,由于不懂python,折腾tolua搞的心累,网上各种百度搜索了半天也不见一个系统的教程,在这里我把这两天的工作总结下,希望有碰到同样问题的朋友能够快速解决。
先说下,系统Mac OS 10.10,cocos引擎版本3.10,ndk使用r10e,python2.7.
1、配好环境变量,NDK_ROOT,COCOS2D-X相关的环境变量自行配好,由于r10e里面只有llvm3.5和3.6,并没有llvm3.3和3.4,所以我从r9d里面把llvm3.3和3.4copy到了r10e相应目录下,这个务必拷贝齐全,要不然各种坑。
2、创建cocos2dx-lua项目,先看下游戏项目目录:

要进行tolua需要修改的就是最后一个目录下的*.ini文件和genbindings.py,这里还需要注意一下userinfo.ini文件,这个是工程相关的一些配置,看下里面的内容

这些内容其实是运行下图红圈中的文件生成的

理一下执行顺序,运行第一步里面的genbindings.py首先会检查环境变量。然后向userinfoconf.ini写入相关路径的配置,最后调用generator.py生成tolua的c++文件。
3、为了使目录结构清晰,自定义的c++类肯定需要放在项目的Classes文件夹下面,Classes文件夹在整个项目工程的位置看下图:

再看下在genbindings.py里面设置的路径

这里最高的层级路径只是到了cocos2d-x这个文件夹,为了在自定义类里面方便的配置头文件路径,在这里,添加一个路径配置,如上图的customclass_root,这个路径就是整个项目的根路径,它的下一级文件夹就是frameworks这一级,这样,在添加Classes里面的自定义类的时候就方便了(解释下配置里的那四个'..',如果不添加这个四个,路径就是在第一幅图的tolua文件夹,加上就是向上返回四级目录,刚好就是项目文件夹跟目录)。
4、在Classes里面添加自定义类myclass,第三部步第一幅图里面看到的那样,里面内容很简单:
头文件:
实现文件:
然后就需要去修改相应的配置文件了首先需要添加一个myclass的ini配置文件,然后修改genbindings.py,这里建议是重新抄一份genbindings.py出来,里面只添加自定义的类,这样就不会影响到引擎本省的一些类的tolua,具体怎么修改请参看http://www.cocoachina.com/bbs/read.php?tid=196416,我也是参看这篇教程摸索出来的,容易出问题的部分就是自定义类的头文件那里,在第三步的时候我自定义了一个项目的根路径,这样在添加头文件路径时就方便很多:

这里的projectdir就是第三步的customclass_root,在存到userinfoconf.ini里面使用的key是projectdir,具体可以参看第三步的图,最后在执行抄过来的genbindings.py,我自己的是genbindings_myclass.py,就可以了,最后看下生成的userinfoconf.ini:

tolua文件的生成路径在上面的链接教程里面有说,需要的朋友自己去看下。
cocos2dx 3.x tolua 分析的更多相关文章
- cocos2d-x 纹理源码分析
转自:http://blog.csdn.net/honghaier/article/details/8068895 当一张图片被加载到内存后,它是以纹理的形式存在的.纹理是什么东西呢?纹理就是一块内存 ...
- cocos2dx中使用tolua++使lua调用c++函数
一直想学学cocos2dx中如何使用tolua++工具使得lua脚本调用C++函数,今天就来搞一下,顺便记录下来: 首先,我们打开cocos2dx-2.2.4中projects下的test的VS工程, ...
- cocos2d-x多分辨率适配原理分析(2.0.4之后的版本)
2013年11月4日补充: 之前写这篇博客的时候其实我还没有开始过真正的去做一个项目,主要过程还是偏向于理解原理.前几天在准备练练手时回过头来想了下这个问题,发现又有点一头雾水了,所以我觉得之前我并没 ...
- [置顶] Cocos2d-x 实例源码分析之二 小实例的主框架
这篇文章是分析第一个小实例ActionTest的源码.其实所有实例程序的结构都是一样的,只有特定方法里的代码不同,大的框架都是一样的.也就是说看完这篇文章你就可以自己开始分析其他源码了. 废话不多说, ...
- cocos2dx的lua绑定
一.cocos2dx对tolua++绑定的修正 A.c对lua回调函数的引用 在使用cocos2dx编写游戏时,我们经常会设置一些回调函数(时钟.菜单选择等).如果采用脚本方式编写游戏的话,这些回调函 ...
- `cocos2dx非完整` 添加xxtea加密模块
在上一篇文章中,我已经开始着手写自己的模块,也就是fw部分.其中上一篇文章中完成的是lua部分的配置解析部分,涉及一点点平台方面的封装.这一片文章我来说明一下我是如何处理cocos2dx资源加密的.首 ...
- Cocos2d-x 程序是如何开始运行与结束的
题记:对于技术,我们大可不必挖得那么深,但一定要具备可以挖得很深的能力 问题的由来 怎么样使用 Cocos2d-x 快速开发游戏,方法很简单,你可以看看其自带的例程,或者从网上搜索教程,运行起 ...
- 【转】Cocos2d-x 程序是如何开始运行与结束的
转自:http://blog.leafsoar.com/archives/2013/05-05.html 题记:对于技术,我们大可不必挖得那么深,但一定要具备可以挖得很深的能力 问题的由来 怎么样使用 ...
- cocos2d-x 2.2.0 如何在lua中注册回调函数给C++
cocos2d-x内部使用tolua进行lua绑定,但是引擎并没有提供一个通用的接口让我们可以把一个lua函数注册给C++层面的回调事件.翻看引擎的lua绑定代码,我们可以仿照引擎中的方法来做.值得吐 ...
随机推荐
- CONTAINING_RECORD的实现
// 9.25.cpp : 定义控制台应用程序的入口点.///*----------------------------CONTAINING_RECODER的实现------------------- ...
- keil uvision3 添加 STC单片机库
本人工作以来,一直从事仪表程序维护和开发工作,使用的清一色的都是microchip单片机。现在弄一个光立方的小玩意,需要用STC单片机。它有特点很明显,方便、资料多、最重要的一点便宜。 网上下载的ke ...
- Windows对象
JS之Window对象 一.说明: 他是JS中最大的对象,它描述的是一个浏览器窗口,一般要引用他的属性和方法时,不需要用“Window.XXX”这种形式,而是直接使用“XXX”.一个框架页面也是一个窗 ...
- Spring学习笔记(一)
1.1.1Spring是什么? Spring是一个开源的轻量级Java SE(Java 标准版本)/Java EE(Java 企业版本)开发应用框架,其目的是用于简化企业级应用程序开发. 1.1.2S ...
- ObjC宏定义小细节
Macros A definition that takes arguments, particularly more than one, is often known as a macro: #de ...
- json返回数据时提示字符串超出长度
JavaScriptSerializer json = new JavaScriptSerializer(); json.MaxJsonLength = Int32.MaxValue; return ...
- 关于最少VC号数目的猜想
[事先说明,实际的虚拟电路的实际物理链路可能同时具有多个VC号,但每段逻辑链路仅有一个VC号,一条完整虚拟路径由多个段组成] 问题描述: 在一个虚拟电路交换网络中,每个路由器的直连链路都有一个独一无二 ...
- runtime作用
1.发送消息 方法调用的本质,就是让对象发送消息. objc_msgSend,只有对象才能发送消息,因此以objc开头. 使用消息机制前提,必须导入#import <objc/message.h ...
- linux编译c文件
1.创建.c文件,比如在firstmake文件夹创建了一个a.c文件,那么编译语句为: gcc -o firstmake a.c //格式为文件夹名 文件名 2.然后就会生成一个firstmake.o ...
- bookstores网上书店测试缺陷报告1
Bookstore网上书店系统测试缺陷报告 缺陷编号 01.01.0001 发现人 吴赵昕 记录日期 2016-06-10 所属模块 购物车 确认人 吴赵昕 确认日期 2016-06-10 当前状 ...