使用tolua++将自定义的C++类嵌入,让lua脚本使用

一般过程:

自定义类 -> 使用tolua++工具编译到LuaCoco2d.cpp中 -> lua调用

步骤一:自定义一个C++类,我定义一个类名为:MySprite

MySprite.h

MySprite.cpp

步骤二:根据自定义类创建一个.pkg文件,我们把自定义的MySprite类定义到.pkg文件中

注意:1>,只要根据自定类.h中的内容,至于.cpp的实现,binding后lua会自动调用类的函数

   2>,书写.pkg文件时要注意几条规则,我们到tolua++文件夹中找到README文件

    

1. Generating the lua<-->C bindings with tolua++

Build scripts for windows (build.bat) and unix (build.sh) are provided
to generate the relevant files after modifying the .pkg files. These
scripts basically run the following command:

tolua++.exe -L basic.lua -o LuaCocos2d.cpp Cocos2d.pkg

This will generate the bindings file and patch it with come cocos2dx
specific modifications.

On POSIX systems you can also just run "make" to build the bindings
if/when you change .pkg files.

2. Writing .pkg files

1) enum keeps the same
2) remove CC_DLL for the class defines, pay attention to multi inherites
3) remove inline keyword for declaration and implementation
4) remove public protect and private
5) remove the decalration of class member variable
6) keep static keyword
7) remove memeber functions that declared as private or protected

这里有.pkg文件详细的书写规则

我们这里直接写一个MySprite.pkg文件,内容如下:

class MySprite : public CCSprite{

  static MySprite * createMS(const char * fileName);

}

书写好我们的.pkg文件之后,将文件放入tolua++文件夹下就可以了

步骤三:配置tolua++工具,用tolua++编译我们写的.pkg文件,将自定义类嵌入到LuaCocos2d.cpp中

我们在tolua++文件夹下找到tolua++.Mac.zip文件,并解压它得到一个tolua++的工具,如图:

解压出工具后,我们在配置tolua++的路径,用Xcode打开build.sh文件,更改俩个地方:

更改后根据各台电脑路径不一,我更改后为:

在这里TOLUA是tolua++工具的位置(路径后加上/tolua++,表示此工具),下面配置的是编译后LuaCocos2d.cpp文件导出的位置

最后,我们将定义的.pkg文件注册到tolua++文件夹下的Cocos2d.pkg中

以上都做完后,我们直接使用终端,到tolua++文件夹下,使用make命令执行tolua++工具

OK!   执行完命令后,将会在桌面上生成LuaCocos2d.cpp文件,且其中已binding好了自定义的类

将新生成的LuaCocos2d.cpp替换掉我们生成项目里的LuaCocos2d.cpp文件

注意:这时新生成的LuaCocos2d.cpp中虽然已经binding了我们的自定义类,但没有引用我们的头文件,这时我们在LuaCocos2d.h中倒入我们的自定义类名

步骤四:Lua中测试我们的自定义类

保存,command + R,成功运行且调用自定义类:

cocos2d-x - C++/Lua交互的更多相关文章

  1. Cocos 2d-X Lua 游戏添加苹果内购(二) OC和Lua交互代码详解

    这是第二篇 Cocos 2d-X Lua 游戏添加苹果内购(一) 图文详解准备流程 这是前面的第一篇,详细的说明了怎样添加内购项目以及填写银行信息提交以及沙盒测试员的添加使用以及需要我们注意的东西,结 ...

  2. C++与Lua交互(四)

    引言 通过前几篇,我们已经对Lua的C API有了一定的了解,如lua_push*.lua_is*.lua_to*等等.用C++调用Lua数据时,我们主要运用lua_getglobal与lua_pus ...

  3. C++与Lua交互(一)

    引言 之前做手游项目时,客户端用lua做脚本,基本所有游戏逻辑都用它完成,玩起来有点不爽,感觉"太重"了.而我又比较偏服务端这边(仅有C++),所以热情不高.最近,加入了一个端游项 ...

  4. C++与Lua交互之配置&交互原理&示例

    |Lua 简介 Lua 是一种轻量小巧的脚本语言,也是号称性能最高的脚本语言,它用C语言编写并以源代码形式开放. 某些程序常常需要修改内容,而修改的内容不仅仅是数据,更要修改很多函数的行为. 而修改函 ...

  5. C++与Lua交互(三)

    通过上一篇的热身,我们对C++调用lua变量有了一个认识,现在让我们再深入一点,去探索一下如何调用lua的函数.表. Lua与宿主通讯的关键--栈 lua是个动态脚本语言,它的数据类型如何映射到C++ ...

  6. C++与Lua交互(二)

    上一篇我们搭建好了整个的项目环境,现在,我们一起探索一下如何将lua寄宿到C++中. 宿主的实现 我们在LuaWithCPPTest项目下,查看Source.cpp代码如下: #include < ...

  7. 最优雅的C++跟lua交互.

    我先来吐槽一下我们这个项目. 我是做手机游戏的, cocos2dx引擎, lua编码. 这本来是一件很欢快的事情, 因为不用接触C++. C++写久了的人写lua, 就会感觉任督二脉被打通了, 代码写 ...

  8. C++与lua交互

    项目开发的脚本层用的是Lua,引擎用的是C++.但是经理不给开放引擎层的代码.刚好最近项目空闲,安排了学习C++跟Lua的通信. 一.C++与Lua数据交互 数据交互主要是通过C API来实现 首先, ...

  9. Linux下C/C++和lua交互-Table

    本来这些文章都是在我的个人网站www.zhangyi.studio,目前处在备案状态,暂时访问不了,所以搬到这边.  最近这两天需要弄清楚C++和lua间相互调用和数据传递,废话不多说,直接上过程. ...

随机推荐

  1. linux的文件权限小结

    对于初接触Linux的朋友来说,会有各种不习惯和各种昏头,文件的权限就很让人不知所措. ls命令以及字段含义 比如我们列出当前目录文件: 我们来看下上述大致含义: 第1行显示的信息: 总用量(tota ...

  2. Flume-ng源码解析之Channel组件

    如果还没看过Flume-ng源码解析之启动流程,可以点击Flume-ng源码解析之启动流程 查看 1 接口介绍 组件的分析顺序是按照上一篇中启动顺序来分析的,首先是Channel,然后是Sink,最后 ...

  3. Rabbitmq集群高可用部署详细

    序言 清风万里的季节,周末本该和亲人朋友一起消遣这烂漫的花花草草,或是懒洋洋的晒个太阳听听风声鸟鸣.无奈工作使然,理想使然,我回到啦公司,敲起啦键盘,撸起啦代码,程序狗的世界一片黯然,一片黯然,愿天下 ...

  4. Contains Duplicate II leetcode

    Given an array of integers and an integer k, find out whether there are two distinct indices i and j ...

  5. 出现java.lang.reflect.UndeclaredThrowableException异常

    解决方案:1.看导进来的项目是否有中文路径.2.看是否有get.set方法没写.3.和部署的环境有关.比如,是否写了构造函数.EJB需要.

  6. SEO-搜索引擎高级搜索指令

    搜索引擎高级搜索指令 1.双引号 把搜索词放在双引号中,代表完全匹配搜索,也就是说搜索结果返回的页面包含双引号中出现的所有的词,连顺序也必须完全匹配.bd和Google 都支持这个指令.例如搜索: & ...

  7. C风格字符串和C++ string 对象赋值操作的性能比较

    <<C++ Primer>> 第四版 Exercise Section 4.3.1 部分Exercise 4.2.9 习题如下: 在自己本机执行如下程序,记录程序执行时间: # ...

  8. ajax(20161110)

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  9. wxpython分割窗研究(解决sashPosition=0无效的BUG)

    用wxpython开发一个简单的exe其实很简单的,但是在开发的过程中会遇到若干的坑.疑问.甚至bug,让人摸不清头脑!恰恰关于这方面的文档是少之又少,看来看去大家还是在官方的文档上加以引用说明,但是 ...

  10. ViewPager 滑动一半的判断方法以及左滑右滑判断

    做项目的时候,会碰到用viewpager + fragments去实现多页滑动.有些时候需要完成:界面在滑动到一半或是一半以上的时候,需要把title之类的切换到下一个页面.这个时候仅仅依赖Viewp ...