关于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我同意,这样一来就导致了不正确的 ...
随机推荐
- Vue.js2.0中的变化(持续更新中)
最近自己在学习Vue.js,在看一些课程的时候可能Vue更新太块了导致课程所讲知识和现在Vue的版本不符,从而报错,我会在以后的帖子持续更新Vue的变化与更新,大家也可以一起交流,共同监督学习! 1. ...
- Java Condition
在Condition中,用await()替换wait(),用signal()替换notify(),用signalAll()替换notifyAll(),传统线程的通信方式,Condition都可以实现, ...
- js-自定义事件
1.自定义事件 开发人员自己定义的事件,是除了系统以外的事件. 可以供其他开发人员使用,有利于多人写作开发,可扩展js的原有事件. 需要:事件绑定器.事件触发器 2.自定义事件三要素 ①:对象.事件名 ...
- 白夜追凶 :手 Q 图片的显示和发送逻辑
欢迎大家前往腾讯云社区,获取更多腾讯海量技术实践干货哦~ 作者:陈舜尧 导语: "这张图片在快捷发图栏背景是黑色的,为啥发到AIO(会话窗口)里背景就变成白的了?" 通过一个bug ...
- 数据帧CRC32校验算法实现
本文设计思想采用明德扬至简设计法.由于本人项目需要进行光纤数据传输,为了保证通信质量要对数据进行校验.在校验算法中,最简单最成熟的非CRC校验莫属了. 得出一个数的CRC校验码还是比较简单的: 选定一 ...
- MongoDB增删改查操作详解
一.插入 MongoDB的插入操作很简单,使用insert方法,这里演示从创建数据库.创建集合到插入文档.查询文档. 集合创建方法参数说明: size:集合最大空间 max:集合最多文档数量 (超出s ...
- JAVA 的 Date、Calendar的常用用法
一.Date与String的互转用法,这里需要用到SimpleDateFormat Date date = new Date(); //设置格式 SimpleDateFor ...
- Windows环境下多线程编程原理与应用读书笔记(8)————信号量及其应用
<一>线程间同步原因 线程间竞争共享资源: 线程间为完成某个任务而协作: 通过互斥量可以实现线程间由于竞争所需要的同步,通过事件可以实现线程间由于协作所需要的同步. 信号量很好地将互斥量和 ...
- Problem A
Problem Description Given a sequence a[1],a[2],a[3]......a[n], your job is to calculate the max sum ...
- transform的影响
http://www.cnblogs.com/chuangweili/p/5167986.html transform 各种影响 1.提升元素的z-index层级,下面这个例子会让前面的图片显示在上面 ...