cocos2d-x - C++/Lua交互
使用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交互的更多相关文章
- Cocos 2d-X Lua 游戏添加苹果内购(二) OC和Lua交互代码详解
这是第二篇 Cocos 2d-X Lua 游戏添加苹果内购(一) 图文详解准备流程 这是前面的第一篇,详细的说明了怎样添加内购项目以及填写银行信息提交以及沙盒测试员的添加使用以及需要我们注意的东西,结 ...
- C++与Lua交互(四)
引言 通过前几篇,我们已经对Lua的C API有了一定的了解,如lua_push*.lua_is*.lua_to*等等.用C++调用Lua数据时,我们主要运用lua_getglobal与lua_pus ...
- C++与Lua交互(一)
引言 之前做手游项目时,客户端用lua做脚本,基本所有游戏逻辑都用它完成,玩起来有点不爽,感觉"太重"了.而我又比较偏服务端这边(仅有C++),所以热情不高.最近,加入了一个端游项 ...
- C++与Lua交互之配置&交互原理&示例
|Lua 简介 Lua 是一种轻量小巧的脚本语言,也是号称性能最高的脚本语言,它用C语言编写并以源代码形式开放. 某些程序常常需要修改内容,而修改的内容不仅仅是数据,更要修改很多函数的行为. 而修改函 ...
- C++与Lua交互(三)
通过上一篇的热身,我们对C++调用lua变量有了一个认识,现在让我们再深入一点,去探索一下如何调用lua的函数.表. Lua与宿主通讯的关键--栈 lua是个动态脚本语言,它的数据类型如何映射到C++ ...
- C++与Lua交互(二)
上一篇我们搭建好了整个的项目环境,现在,我们一起探索一下如何将lua寄宿到C++中. 宿主的实现 我们在LuaWithCPPTest项目下,查看Source.cpp代码如下: #include < ...
- 最优雅的C++跟lua交互.
我先来吐槽一下我们这个项目. 我是做手机游戏的, cocos2dx引擎, lua编码. 这本来是一件很欢快的事情, 因为不用接触C++. C++写久了的人写lua, 就会感觉任督二脉被打通了, 代码写 ...
- C++与lua交互
项目开发的脚本层用的是Lua,引擎用的是C++.但是经理不给开放引擎层的代码.刚好最近项目空闲,安排了学习C++跟Lua的通信. 一.C++与Lua数据交互 数据交互主要是通过C API来实现 首先, ...
- Linux下C/C++和lua交互-Table
本来这些文章都是在我的个人网站www.zhangyi.studio,目前处在备案状态,暂时访问不了,所以搬到这边. 最近这两天需要弄清楚C++和lua间相互调用和数据传递,废话不多说,直接上过程. ...
随机推荐
- redux-form的学习笔记
redux是一种常用的与react框架搭配的一种数据流架构,而伴随着redux的出现,也出现了许多基于redux开源的第三方库,而redux-form就是其中之一的开源组件库,到今天我写下这篇笔记为止 ...
- UVa 1588 换抵挡装置
前言 题目 大意是说,两个槽能够插在一起,并保证每一列的高度不高于3,保证最短长度. 思路 思路很简单,取短字符串遍历长字符串的每一个位置,纪录下位置,并取最短即可. 实现 //习题3-11 换抵挡装 ...
- MyFirstServlet学习笔记
MyFirstServlet学习笔记 项目文件的结构目录如下,ser包,下设Serv.java是一个servlet文件,Note只是做的笔记,webroot下有login.jsp,WEB-INF下有w ...
- python + selenium <一>
python 安装 python 下载地址: http://python.org/getit/ ez_setup.py 下载地址: https://pypi.python.org/packages/s ...
- ORM映射设计思想
using System; using System.Collections.Generic; using System.Data.SqlClient; using System.Linq; usin ...
- c#进程之间对象传递方法
1. 起源 KV项目下载底层重构升级决定采用独立进程进行Media下载处理,以能做到模块复用之目的,因此涉及到了独立进程间的数据传递问题. 目前进程间数据传递,多用WM_COPYDATA.共享dll. ...
- Json 与GeoJson
1.JSON介绍 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.简单地说,JSON 可以将 JavaScript 对象中表示的一组数据转换为字符串,然后 ...
- ctrl+alt+F1~6进入不了字符界面,黑屏的解决办法
ubuntu系统,我是ubuntu14.04 本来想装cuda,需要在字符界面下装,奈何按ctrl+alt+F1就黑屏了,按ctrl+alt+F7又可以正常回到图形界面,网上查了很多,有的方法也试过, ...
- LinkedHashSet的概述和使用
LinkedHashSet的特点: 可以保证怎么存就怎么取 package online.msym.set; import java.util.LinkedHashSet; public class ...
- Sublime安装Package Control插件
一.简易安装 打开Sublime text的console.打开console的快捷时ctrl+,或者在菜单栏点击View->Show Sonsole`.打开后将下面的代码复制到console中 ...