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

二、使用tolua++生成自定义类的声明

打开tool文件夹中的readme文件如下:

  1. 1. Generating the lua<-->C bindings with tolua++
  2. tolua++.exe -tCocos2d -o LuaCocos2d.cpp Cocos2d.pkg

我们为了方便可以制作一个批处理文件、放在tolua.exe同目录下、每次点击就可产生自定义类的声明、如下

  1. -----------------------------------------createCpp.bat---------------------------
  2. @echo on
  3. E:\gkh_netdisk\tools\tolua++\tolua++.exe -o testCtoLua.cpp testCtoLua.pkg
  4. @pause
  5. ---------------------------------------------------------------------------------

然后开始编写testCtoLua.pkg 要遵循以下的规则

  1. 2.Writing .pkg files  编写pkg文件
  2. 1)enum keeps the same 保持枚举类型不变
  3. 2)remove CC_DLL for the class defines, pay attention to multi inherites 删除CC_DLL的类定义、改为多继承
  4. 3)remove inline keyword for declaration and implementation 删掉声明的inline关键词
  5. 4)remove public protect and private 删除访问限定
  6. 5)remove the decalration of class member variable 删除类的成员变量
  7. 6)keep static keyword  保留statiic关键词
  8. 7)remove memeber functions that declared as private or protected 成员函数声明为私人或受保护的都删掉

我这里就不去写了、就直接用现成的CCDirector类做个测试

  1. ----------- CCDirector.pkg-----------
  2. typedef enum {
  3. /// Device oriented vertically, home button on the bottom
  4. kCCDeviceOrientationPortrait = 0, // UIDeviceOrientationPortrait,
  5. /// Device oriented vertically, home button on the top
  6. kCCDeviceOrientationPortraitUpsideDown = 1, // UIDeviceOrientationPortraitUpsideDown,
  7. /// Device oriented horizontally, home button on the right
  8. kCCDeviceOrientationLandscapeLeft = 2, // UIDeviceOrientationLandscapeLeft,
  9. /// Device oriented horizontally, home button on the left
  10. kCCDeviceOrientationLandscapeRight = 3, // UIDeviceOrientationLandscapeRight,
  11. } ccDeviceOrientation;
  12. class CCDirector : public CCObject
  13. {
  14. CCScene* getRunningScene(void);
  15. double getAnimationInterval(void);
  16. bool isDisplayFPS(void);
  17. void setDisplayFPS(bool bDisplayFPS);
  18. bool isRetinaDisplay();
  19. bool isPaused(void);
  20. unsigned int getFrames(void);
  21. CCSize getWinSize(void);
  22. CCSize getWinSizeInPixels(void);
  23. CCSize getDisplaySizeInPixels(void);
  24. CCPoint convertToGL(CCPoint obPoint);
  25. CCPoint convertToUI(CCPoint obPoint);
  26. void runWithScene(CCScene *pScene);
  27. void pushScene(CCScene *pScene);
  28. void popScene(void);
  29. void replaceScene(CCScene *pScene);
  30. CGFloat getContentScaleFactor(void);
  31. int getDeviceOrientation();
  32. static CCDirector* sharedDirector(void);
  33. };

然后将编写好的*.pkg文件复制到tolua++文件目录下、双击前文的批处理文件、不出意外就能生成相对应的Cpp文件了
 
CCDirector.cpp中的关键代码是这些:

  1. tolua_beginmodule(tolua_S,"CCDirector");
  2. tolua_function(tolua_S,"getRunningScene",tolua_CCDirector_CCDirector_getRunningScene00);
  3. tolua_function(tolua_S,"getAnimationInterval",tolua_CCDirector_CCDirector_getAnimationInterval00);
  4. tolua_function(tolua_S,"isDisplayFPS",tolua_CCDirector_CCDirector_isDisplayFPS00);
  5. tolua_function(tolua_S,"setDisplayFPS",tolua_CCDirector_CCDirector_setDisplayFPS00);
  6. tolua_function(tolua_S,"isRetinaDisplay",tolua_CCDirector_CCDirector_isRetinaDisplay00);
  7. tolua_function(tolua_S,"isPaused",tolua_CCDirector_CCDirector_isPaused00);
  8. tolua_function(tolua_S,"getFrames",tolua_CCDirector_CCDirector_getFrames00);
  9. tolua_function(tolua_S,"getWinSize",tolua_CCDirector_CCDirector_getWinSize00);
  10. tolua_function(tolua_S,"getWinSizeInPixels",tolua_CCDirector_CCDirector_getWinSizeInPixels00);
  11. tolua_function(tolua_S,"getDisplaySizeInPixels",tolua_CCDirector_CCDirector_getDisplaySizeInPixels00);
  12. tolua_function(tolua_S,"convertToGL",tolua_CCDirector_CCDirector_convertToGL00);
  13. tolua_function(tolua_S,"convertToUI",tolua_CCDirector_CCDirector_convertToUI00);
  14. tolua_function(tolua_S,"runWithScene",tolua_CCDirector_CCDirector_runWithScene00);
  15. tolua_function(tolua_S,"pushScene",tolua_CCDirector_CCDirector_pushScene00);
  16. tolua_function(tolua_S,"popScene",tolua_CCDirector_CCDirector_popScene00);
  17. tolua_function(tolua_S,"replaceScene",tolua_CCDirector_CCDirector_replaceScene00);
  18. tolua_function(tolua_S,"getContentScaleFactor",tolua_CCDirector_CCDirector_getContentScaleFactor00);
  19. tolua_function(tolua_S,"getDeviceOrientation",tolua_CCDirector_CCDirector_getDeviceOrientation00);
  20. tolua_function(tolua_S,"sharedDirector",tolua_CCDirector_CCDirector_sharedDirector00);

只要把cpp中的对应的代码复制到引擎目录下cocos2d_support文件夹中Luacocos2d.cpp中就搞定了 然后重新编译项目、就可以在lua中使用这个接口了、

关于tolua的使用的更多相关文章

  1. Unity3d:UI面板管理整合进ToLua

    本文基于 https://github.com/chiuan/TTUIFramework https://github.com/jarjin/LuaFramework_UGUI 进行的二次开发,Tha ...

  2. cocos2dx 3.x tolua 分析

    cocos2dx 3.x 版本已经出到3.10了,终于决定要进行引擎版本升级,c++配合lua进行游戏开发,从3.x版本开始cocos使用了新的tolua方式,由于不懂python,折腾tolua搞的 ...

  3. tolua++实现分析

    项目正在使用cocos2dx的lua绑定,绑定的方式是tolua++.对大规模使用lua代码信心不是很足,花了一些时间阅读tolua++的代码,希望对绑定实现的了解,有助于项目对lua代码的把控.从阅 ...

  4. U3D 扩展方法 & Dotween & tolua

    using UnityEngine; using System.Collections; using LuaInterface;//tolua 空间引用 using DG.Tweening;//DOT ...

  5. tolua.cast的实用方法

    local name = (tolua.cast(sender, "ccui.Button")):getTitleText()

  6. cocos2dx 2.x版本:简化提炼tolua++绑定自定义类到lua中使用

    cocos2dx的3.x版本已经提供了更好地绑定方式,网上有很多相关的教程,这里给一个链接:http://www.cocoachina.com/bbs/read.php?tid=196416. 由于目 ...

  7. 学习tolua#·20多个例子

    初始项目搭建 clone官方库 新建unity工程 依次把官方库里的Assets和Unity5.x/Assets拷贝到项目Assets里 打开unity工程, 开始逐个学习例子,例子目录: 1. he ...

  8. 使用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 // //  ...

  9. tolua 有些功能可以用(经过测试)

    tolua 提供几个 C++ 与 Lua 进行数据交换的工具函数. ~~ tolua.type 返回一个 C++ 对象的类型描写叙述字符串. local node = display.newNode( ...

  10. cocos2dx使用tolua关于字符串处理的一个问题

    正在使用cocos2dx的tolua binding在此过程中发现的一个问题.假设一回或输入是std::string当我们不同意包括二进制数据,和std::string我同意,这样一来就导致了不正确的 ...

随机推荐

  1. PHP入门,clone和__clone

      前 言 这篇文章主要介绍了PHP编程中的__clone()方法使用详解,__clone()方法相当于一个浅拷贝,是PHP入门学习中的基础知识,需要的朋友可以参考下. 1对象是引用数据类型,当使用= ...

  2. CentOS7.3安装NVIDIA-1080ti驱动、cuda、cudnn、TensorFlow

    本文为作者原创,转载请注明出处(http://www.cnblogs.com/mar-q/)by 负赑屃 Ubuntu非要换centOS...好吧... 看了很多是通过ELRepo源安装驱动,不过我没 ...

  3. C#设计模式之十一外观模式(Facade)【结构型】

    一.引言 快12点半了,要开始今天的写作了.很快,转眼设计模式已经写了十个了,今天我们要讲[结构型]设计模式的第五个模式,该模式是[外观模式],英文名称是:Facade Pattern.我们先从名字上 ...

  4. d3根据数据绘制不同的形状

    绘制力导向图的时候通常节点都是圆形,但也会遇到公司节点绘制成圆型,人绘制成方形的情况,那我们怎么依据数据绘制不同的形状. 你可能首先会想到,这很简单啊,是公司的时候append circle,是人的时 ...

  5. 用C写的计算运行时间

    #include <stdio.h> #include <stdlib.h> #include <time.h> int main( void ) { long i ...

  6. 剑指offer(一)

    面试题3:二维数组中查找 题目描述: 在一个二维数组中,每一行都按照从左往右递增地顺序排序,每一列都按照从上往下递增的顺序排序.请完成一个函数,输入这样的一个数组和一个整数,判断数组中是否存在该整数. ...

  7. awk巩固练习题

    第1章 awk数组练习题 1.1 文件内容(仅第一行) [root@znix test]# head -1 secure-20161219 access.log ==> secure-20161 ...

  8. 使用mitmproxy嗅探双向认证ssl链接——嗅探AWS IoT SDK的mqtts

    亚马逊AWS IoT使用MQTTS(在TLS上的MQTT)来提供物联网设备与云平台直接的通信功能.出于安全考虑,建议给每个设备配备了证书来认证,同时,设备也要安装亚马逊的根证书:这样,在使用8883端 ...

  9. maven构建SSM--pox.mxl

    最近在做项目,把maven构建SSM的pom.xml文件内容小结一下: 在console中输入如下内容,使用maven创建java web项目: mvn archetype:generate -Dgr ...

  10. WebService--jax

    使用javax.jws编写webservice服务: 服务端: 1,定义webservice接口: package com.jws.serviceInterface; import javax.jws ...