关于tolua的使用
一、首先在引擎的跟目录下找到cocos2d-x自带的工具tolua++

二、使用tolua++生成自定义类的声明
打开tool文件夹中的readme文件如下:
- 1. Generating the lua<-->C bindings with tolua++
- tolua++.exe -tCocos2d -o LuaCocos2d.cpp Cocos2d.pkg
我们为了方便可以制作一个批处理文件、放在tolua.exe同目录下、每次点击就可产生自定义类的声明、如下
- -----------------------------------------createCpp.bat---------------------------
- @echo on
- E:\gkh_netdisk\tools\tolua++\tolua++.exe -o testCtoLua.cpp testCtoLua.pkg
- @pause
- ---------------------------------------------------------------------------------
然后开始编写testCtoLua.pkg 要遵循以下的规则
- 2.Writing .pkg files 编写pkg文件
- 1)enum keeps the same 保持枚举类型不变
- 2)remove CC_DLL for the class defines, pay attention to multi inherites 删除CC_DLL的类定义、改为多继承
- 3)remove inline keyword for declaration and implementation 删掉声明的inline关键词
- 4)remove public protect and private 删除访问限定
- 5)remove the decalration of class member variable 删除类的成员变量
- 6)keep static keyword 保留statiic关键词
- 7)remove memeber functions that declared as private or protected 成员函数声明为私人或受保护的都删掉
我这里就不去写了、就直接用现成的CCDirector类做个测试
- ----------- CCDirector.pkg-----------
- typedef enum {
- /// Device oriented vertically, home button on the bottom
- kCCDeviceOrientationPortrait = 0, // UIDeviceOrientationPortrait,
- /// Device oriented vertically, home button on the top
- kCCDeviceOrientationPortraitUpsideDown = 1, // UIDeviceOrientationPortraitUpsideDown,
- /// Device oriented horizontally, home button on the right
- kCCDeviceOrientationLandscapeLeft = 2, // UIDeviceOrientationLandscapeLeft,
- /// Device oriented horizontally, home button on the left
- kCCDeviceOrientationLandscapeRight = 3, // UIDeviceOrientationLandscapeRight,
- } ccDeviceOrientation;
- class CCDirector : public CCObject
- {
- CCScene* getRunningScene(void);
- double getAnimationInterval(void);
- bool isDisplayFPS(void);
- void setDisplayFPS(bool bDisplayFPS);
- bool isRetinaDisplay();
- bool isPaused(void);
- unsigned int getFrames(void);
- CCSize getWinSize(void);
- CCSize getWinSizeInPixels(void);
- CCSize getDisplaySizeInPixels(void);
- CCPoint convertToGL(CCPoint obPoint);
- CCPoint convertToUI(CCPoint obPoint);
- void runWithScene(CCScene *pScene);
- void pushScene(CCScene *pScene);
- void popScene(void);
- void replaceScene(CCScene *pScene);
- CGFloat getContentScaleFactor(void);
- int getDeviceOrientation();
- static CCDirector* sharedDirector(void);
- };
然后将编写好的*.pkg文件复制到tolua++文件目录下、双击前文的批处理文件、不出意外就能生成相对应的Cpp文件了
CCDirector.cpp中的关键代码是这些:
- tolua_beginmodule(tolua_S,"CCDirector");
- tolua_function(tolua_S,"getRunningScene",tolua_CCDirector_CCDirector_getRunningScene00);
- tolua_function(tolua_S,"getAnimationInterval",tolua_CCDirector_CCDirector_getAnimationInterval00);
- tolua_function(tolua_S,"isDisplayFPS",tolua_CCDirector_CCDirector_isDisplayFPS00);
- tolua_function(tolua_S,"setDisplayFPS",tolua_CCDirector_CCDirector_setDisplayFPS00);
- tolua_function(tolua_S,"isRetinaDisplay",tolua_CCDirector_CCDirector_isRetinaDisplay00);
- tolua_function(tolua_S,"isPaused",tolua_CCDirector_CCDirector_isPaused00);
- tolua_function(tolua_S,"getFrames",tolua_CCDirector_CCDirector_getFrames00);
- tolua_function(tolua_S,"getWinSize",tolua_CCDirector_CCDirector_getWinSize00);
- tolua_function(tolua_S,"getWinSizeInPixels",tolua_CCDirector_CCDirector_getWinSizeInPixels00);
- tolua_function(tolua_S,"getDisplaySizeInPixels",tolua_CCDirector_CCDirector_getDisplaySizeInPixels00);
- tolua_function(tolua_S,"convertToGL",tolua_CCDirector_CCDirector_convertToGL00);
- tolua_function(tolua_S,"convertToUI",tolua_CCDirector_CCDirector_convertToUI00);
- tolua_function(tolua_S,"runWithScene",tolua_CCDirector_CCDirector_runWithScene00);
- tolua_function(tolua_S,"pushScene",tolua_CCDirector_CCDirector_pushScene00);
- tolua_function(tolua_S,"popScene",tolua_CCDirector_CCDirector_popScene00);
- tolua_function(tolua_S,"replaceScene",tolua_CCDirector_CCDirector_replaceScene00);
- tolua_function(tolua_S,"getContentScaleFactor",tolua_CCDirector_CCDirector_getContentScaleFactor00);
- tolua_function(tolua_S,"getDeviceOrientation",tolua_CCDirector_CCDirector_getDeviceOrientation00);
- tolua_function(tolua_S,"sharedDirector",tolua_CCDirector_CCDirector_sharedDirector00);
只要把cpp中的对应的代码复制到引擎目录下cocos2d_support文件夹中Luacocos2d.cpp中就搞定了 然后重新编译项目、就可以在lua中使用这个接口了、
关于tolua的使用的更多相关文章
- Unity3d:UI面板管理整合进ToLua
本文基于 https://github.com/chiuan/TTUIFramework https://github.com/jarjin/LuaFramework_UGUI 进行的二次开发,Tha ...
- cocos2dx 3.x tolua 分析
cocos2dx 3.x 版本已经出到3.10了,终于决定要进行引擎版本升级,c++配合lua进行游戏开发,从3.x版本开始cocos使用了新的tolua方式,由于不懂python,折腾tolua搞的 ...
- tolua++实现分析
项目正在使用cocos2dx的lua绑定,绑定的方式是tolua++.对大规模使用lua代码信心不是很足,花了一些时间阅读tolua++的代码,希望对绑定实现的了解,有助于项目对lua代码的把控.从阅 ...
- U3D 扩展方法 & Dotween & tolua
using UnityEngine; using System.Collections; using LuaInterface;//tolua 空间引用 using DG.Tweening;//DOT ...
- tolua.cast的实用方法
local name = (tolua.cast(sender, "ccui.Button")):getTitleText()
- cocos2dx 2.x版本:简化提炼tolua++绑定自定义类到lua中使用
cocos2dx的3.x版本已经提供了更好地绑定方式,网上有很多相关的教程,这里给一个链接:http://www.cocoachina.com/bbs/read.php?tid=196416. 由于目 ...
- 学习tolua#·20多个例子
初始项目搭建 clone官方库 新建unity工程 依次把官方库里的Assets和Unity5.x/Assets拷贝到项目Assets里 打开unity工程, 开始逐个学习例子,例子目录: 1. he ...
- 使用tolua++编译pkg,从而创建自定义类让Lua脚本使用
步骤一:首先自定义类(这里Himi自定义类名 “MySprite”) MySprite.h 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 // // ...
- tolua 有些功能可以用(经过测试)
tolua 提供几个 C++ 与 Lua 进行数据交换的工具函数. ~~ tolua.type 返回一个 C++ 对象的类型描写叙述字符串. local node = display.newNode( ...
- cocos2dx使用tolua关于字符串处理的一个问题
正在使用cocos2dx的tolua binding在此过程中发现的一个问题.假设一回或输入是std::string当我们不同意包括二进制数据,和std::string我同意,这样一来就导致了不正确的 ...
随机推荐
- 【笔记】【VSCode】Windows下VSCode编译调试c/c++
转载自http://m.2cto.com/kf/201606/516207.html 首先看效果 设置断点,变量监视,调用堆栈的查看: 条件断点的使用: 下面是配置过程: 总体流程: 下载安装vsco ...
- 图论 Warshall 和Floyd 矩阵传递闭包
首先我们先说下图论,一般图存储可以使用邻接矩阵,或邻接表,一般使用邻接矩阵在稠密图比较省空间. 我们来说下有向图,一般的有向图也是图,图可以分为稠密图,稀疏图,那么从意思上,稠密图就是点的边比较多,稀 ...
- laravel框架包资源分享
最近发现laravel框架包很难下,楼楼之前下了两个版本,分享一下,希望对大家有所帮助.laravel-v5.2.15 链接: https://pan.baidu.com/s/1qYyhbFe 密码: ...
- python学习之第三课时--基本数据类型及区别,变量
基本数据类型及区别 1. 数字类型(int) 数字型--变量值直接是数字,没有双引号"" 整数 2. 浮点数(float) 肤浅理解小数点后有有效数字 1.55 0.22 ...
- 25.Linux-Nor Flash驱动(详解)
1.nor硬件介绍: 从原理图中我们能看到NOR FLASH有地址线,有数据线,它和我们的SDRAM接口相似,能直接读取数据,但是不能像SDRAM直接写入数据,需要有命令才行 1.1其中我们2440的 ...
- 【原创】基于禅道的Bug管理操作规范
1. 禅道简介 禅道是一个基于"敏捷开发"模式的软件开发全生命周期管理软件,在国内的软件开发公司里占据了超过70%的份额,从大公司到小公司,都能适用. 禅道官网:http://ww ...
- winfrom窗体加载控制台程序,可以自定义输出语句颜色
winfrom窗体加载控制台程序,可以自定方输出语句颜色,如下图所示 怎么实现的此功能,网上有大把的方法,我这里已经把方法打包成了一个类,只需要引用调用就可以使用了,写的比较粗糙,如有发现需要改进的地 ...
- CentOS7安装GitLab、汉化、邮箱配置及使用
同步首发:http://www.yuanrengu.com/index.php/20171112.html 一.GitLab简介 GitLab是利用Ruby On Rails开发的一个开源版本管理系统 ...
- 安全框架Shiro入门
Shiro简介 Apache Shiro是Java的一个安全框架,官网为shiro.apache.org,主要场景为控制登陆,判断用户是否有访问某个功能的权限等等. Shiro的核心功能(入门知识,只 ...
- [Bayes] Why we prefer Gaussian Distribution
最后还是选取一个朴素直接的名字,在此通过手算体会高斯的便捷和神奇. Ref: The Matrix Cookbook 注意,这里的所有变量默认都为多元变量,不是向量就是矩阵.多元高斯密度函数如下: 高 ...