一、首先在引擎的跟目录下找到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中使用这个接口了、