Quick-Cocos2d-x 使用tolua工具导出C++的类给Lua调用

记得很久以前,刚开始接触Quick,那时候尝试过一次这样的操作,不过失败了。

因为那时候还年幼,对这里面的一套机制不是太熟悉。现在回头再做这样的事,遇到了问题,但是都很好的根据自己的理解给解决了。

现在记录下,我tolua成功的过程,在写blog的过程中,更熟练其中的原理。

PS:网上关于quick tolua的blog都有点过时了(dualface的quick官网文章),具体的过程,还是要自己多注意。

我是基于Quick 2.2.1-rc版本实现的。

————————————————————————————————————————————————————————————

首先quick项目中找到:如下图红线框的两个重要文件夹。

进入第一个cocos2d-x文件夹:

继续进入一层文件夹cocos2dx,创建我们自定义的类,如下图我红线框住的类:

MyAdder的实现是2个整数的加法实现如下:

H文件:

1 #ifndef MY_ADDER
2 #define MY_ADDER
3 
4 class MyAdder
5 {
6 public:
7     static int addTwoNumber(int a,int b);
8 };
9 #endif

CPP文件:

1 #include "MyAdder.h"
2 
3 int MyAdder::addTwoNumber(int b)
4 {
5     return a+b;
6 }

创建好了以后,需要注意一点,非常重要的一点:

android.mk文件的修改:

mk文件的位置:

就是这个mk文件。

mk文件的作用是什么?简单一句:配置需要编译h,cpp文件,最终生成动态库or静态库,android通过System.loadLibrary("game");

加载(动态库or静态库)到android平台中,然后Lua脚本就可以调用什么CCSprite等等Cocos2dx的库函数了。

所以我也需要配置我自己定义的h,cpp文件。所以:如下:

这样,在android项目下,build_native.bat的时候,就可以把我们的类文件也编译到libgame.so包中去了。

至于mk文件的详细介绍,请看这里:点击跳转

到这里,思考下,我完成了那些步骤。

1_成功将我自己定义的类加载到了.so包中,也就是当成功加载了so包后,我定义的类也就在内存中了,但是lua怎么调用呢?

接下来需要做的事,调用我加载到内存中的so文件。

首先根据我的类创建一个tolua文件。

如何编写tolua文件?网上有具体的规则。不会的话,可以参考别人的转换规则。哪里看?here:

这里面都是cocos2dx中的c++文件转换后的tolua文件,可以参考这里的。

然后如下位置创建一个MyAdder.tolua文件:

MyAdder.tolua文件的内容:

class MyAdder : public CCObject { public: int b); };

MyAdder.tolua文件创建成功后,需要思考一下:

如何让我定义的tolua文件可以成功的编译到文件中呢。。。需要在上图中的Cocos2d.tolua文件中,添加如下代码:

好~ tolua文件也绑定成功了。开始使用tolua++的工具编译我定义的tolua文件了。

使用tolua++的主要目的是:

生成lua到c++文件调用的中间文件,也就是:

%QUICK_COCOS2DX_ROOT%\lib\cocos2d-x\scripting\lua\cocos2dx_support\LuaCocos2d.cpp

这个具体可以看:

build.bat的实现是这样的:

@echo off
set DIR=%~dp0
set TOLUA=%QUICK_COCOS2DX_ROOT%\bin\win32\tolua++.exe

cd /d "%DIR%"
%TOLUA% -L "%DIR%basic.lua" -o "%QUICK_COCOS2DX_ROOT%\lib\cocos2d-x\scripting\lua\cocos2dx_support\LuaCocos2d.cpp"Cocos2d.tolua

tolua的编译参数参考(方便理解上面的编译命令行参数):

点击build.bat后,等待tolua++.exe编译生成LuaCocos2d.cpp文件,执行完后,看生成的LuaCocos2d.cpp文件,

看文件里面时候有MyAdder关键字,如果有,则生成成功了。

生成成功后,还需要在LuaCocos2d.cpp文件中添加一行(否则会在编译so包时报错):

一切就绪,使用Eclipse,点击build_native.bat编译c++文件,这个编译过程中,编译了我定义的MyAdder文件,

如果自定义的文件里面有语法错误,或者其它的什么错误,这个编译过程会中断的。

它还会编译个重要的cpp文件,就是:LuaCocos2d.cpp文件。记得这里面有我定义的MyAdder类么,

把LuaCocos2d.cpp文件编译通过后,我们在lua脚本中就可以调用我自定义的类了。

整个编译通过后,生成了so文件,~~~~~

clean project,run as android application~~~~

上真机演示效果:

忘了说我的脚本调用代码了:

总结:

既然是Lua调用C++,需要知道:

1.创建我自己定义的h,cpp文件。

2.将上面创建的h,cpp文件能成功加载编译到so包中,并载入程序运行的内存中(android.mk文件的增加我的类)

3.创建lua跟c++相互调用的中间API转换文件(LuaCocos2d.cpp)

4.既然要创建LuaCocos2d.cpp文件,需要用到tolua++工具

5.既然需要用tolua++工具,就需要把自己的类的接口写成tolua文件

6.写好tolua文件,添加到cocos2d.tolua编译目录中,用来编译生成LuaCocos2d.cpp文件

7.自动生成LuaCocos2d.cpp成功,将我的类的定义写到LuaCocos2d.cpp文件中。( #include "MyAdder.h")

8.android Project下编译生成so包,测试。。。

————————————————————OVER————————————————————————

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


    本文实践自 RayWenderlich、Ali Hafizji 的文章《How To Create Dynamic Textures with CCRenderTexture in Cocos2D 2.X》,文中使用Cocos2D,我在这里使用Cocos2D-x 2.1.4进行学习和移植。在这篇文章,将会学习到如何创建实时纹理、如何用Gimp创建无缝拼接纹
Cocos-code-ide使用入门学习地点:杭州滨江邮箱:appdevzw@163.com微信公众号:HopToad 欢迎转载,转载标注出处:http://blog.csdn.netotbaron/article/details/424343991.  软件准备 下载地址:http://cn.cocos2d-x.org/download 2.  简介2.1         引用C
第一次開始用手游引擎挺激动!!!进入正题。下载资源1:从Cocos2D-x官网上下载,进入网页http://www.cocos2d-x.org/download,点击Cocos2d-x以下的Download  v3.0,保存到自定义的文件夹2:从python官网上下载。进入网页https://www.python.org/downloads/,我当前下载的是3.4.0(当前最新
    Cocos2d-x是一款强大的基于OpenGLES的跨平台游戏开发引擎,易学易用,支持多种智能移动平台。官网地址:http://cocos2d-x.org/当前版本:2.0    有很多的学习资料,在这里我只做为自己的笔记记录下来,错误之处还请指出。在VisualStudio2008平台的编译:1.下载当前稳
1.  来源 QuickV3sample项目中的2048样例游戏,以及最近《最强大脑》娱乐节目。将2048改造成一款挑战玩家对数字记忆的小游戏。邮箱:appdevzw@163.com微信公众号:HopToadAPK下载地址:http://download.csdn.net/detailotbaron/8446223源码下载地址:http://download.csdn.net/
   Cocos2d-x3.x已经支持使用CMake来进行构建了,这里尝试以QtCreatorIDE来进行CMake构建。Cocos2d-x3.X地址:https://github.com/cocos2d/cocos2d-x1.打开QtCreator,菜单栏→"打开文件或项目...",打开cocos2d-x目录下的CMakeLists.txt文件;2.弹出CMake向导,如下图所示:设置
 下载地址:链接:https://pan.baidu.com/s/1IkQsMU6NoERAAQLcCUMcXQ提取码:p1pb下载完成后,解压进入build目录使用vs2013打开工程设置平台工具集,打开设置界面设置: 点击开始编译等待编译结束编译成功在build文件下会出现一个新文件夹Debug.win32,里面就是编译
分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!http://www.captainbed.net前言上次用象棋演示了cocos2dx的基本用法,但是对cocos2dx并没有作深入的讨论,这次以超级马里奥的源代码为线索,我们一起来学习超级马里奥的实
1. 圆形音量button事实上作者的本意应该是叫做“电位计button”。可是我觉得它和我们的圆形音量button非常像,所以就这么叫它吧~先看效果:好了,不多解释,本篇到此为止。(旁白: 噗。就这样结束了?)啊才怪~我们来看看代码:[cpp] viewplaincopyprint?CCContro
原文链接:http://www.cnblogs.com/physwf/archive/2013/04/26/3043912.html为了进一步深入学习贯彻Cocos2d,我们将自己写一个场景类,但我们不会走的太远,凡是都要循序渐进,哪怕只前进一点点,那也至少是前进了,总比贪多嚼不烂一头雾水的好。在上一节中我们建
2019独角兽企业重金招聘Python工程师标准>>>cocos2d2.0之后加入了一种九宫格的实现,主要作用是用来拉伸图片,这样的好处在于保留图片四个角不变形的同时,对图片中间部分进行拉伸,来满足一些控件的自适应(PS: 比如包括按钮,对话框,最直观的形象就是ios里的短信气泡了),这就要求图
原文链接:http://www.cnblogs.com/linji/p/3599478.html1.环境和工具准备Win7VS2010/2012,至于2008v2版本之后似乎就不支持了。 2.安装pythonv.2.0版本之前是用vs模板创建工程的,到vs2.2之后就改用python创建了。到python官网下载版本2.7.5的,然后
环境:ubuntu14.04adt-bundle-linux-x86_64android-ndk-r9d-linux-x86_64cocos2d-x-3.0正式版apache-ant1.9.3python2.7(ubuntu自带)加入环境变量exportANDROID_SDK_ROOT=/home/yangming/adt-bundle-linux/sdkexportPATH=${PATH}:/$ANDROID_SDK_ROOTools/export
1开发背景游戏程序设计涉及了学科中的各个方面,鉴于目的在于学习与进步,本游戏《FlappyBird》采用了两个不同的开发方式来开发本款游戏,一类直接采用win32底层API来实现,另一类采用当前火热的cocos2d-x游戏引擎来开发本游戏。2需求分析2.1数据分析本项目要开发的是一款游
原文链接:http://www.cnblogs.com/linji/p/3599912.html//纯色色块控件(锚点默认左下角)CCLayerColor*ccc=CCLayerColor::create(ccc4(255,0,0,128),200,100);//渐变色块控件CCLayerGradient*ccc=CCLayerGradient::create(ccc4(255,0,0,
原文链接:http://www.cnblogs.com/linji/p/3599488.html//载入一张图片CCSprite*leftDoor=CCSprite::create("loading/door.png");leftDoor->setAnchorPoint(ccp(1,0.5));//设置锚点为右边中心点leftDoor->setPosition(ccp(240,160));/
为了答谢广大学员对智捷课堂以及关老师的支持,现购买51CTO学院关老师的Cocos2d-x课程之一可以送智捷课堂编写图书一本(专题可以送3本)。一、Cocos2d-x课程列表:1、Cocos2d-x入门与提高视频教程__Part22、Cocos2d-x数据持久化与网络通信__Part33、Cocos2d-x架构设计与性能优化内存优
Spawn让多个action同时执行。Spawn有多种不同的create方法,最终都调用了createWithTwoActions(FiniteTimeAction*action1,FiniteTimeAction*action2)方法。createWithTwoActions调用initWithTwoActions方法:对两个action变量初始化:_one=action1;_two=action2;如果两个a
需要环境:php,luajit.昨天在cygwin上安装php和luajit环境,这真特么是一个坑。建议不要用虚拟环境安装打包环境,否则可能会出现各种莫名问题。折腾了一下午,最终将环境转向linux。其中,luajit的安装脚本已经在quick-cocos2d-x-develop/bin/中,直接luajit_install.sh即可。我的lin
v3.0相对v2.2来说,最引人注意的。应该是对触摸层级的优化。和lambda回调函数的引入(嗯嗯,不枉我改了那么多类名。话说,每次cocos2dx大更新。总要改掉一堆类名函数名)。这些特性应该有不少人研究了,所以今天说点跟图片有关的东西。v3.0在载入图片方面也有了非常大改变,仅仅只是