您的位置:首页 > 移动开发 > Cocos引擎

cocos2d_x+lua【9】 ------tolua++使用(将2d_x自定义类导入lua)

2014-06-05 14:48 330 查看
原文链接:/article/7758003.html

oDustGgg个人原创、欢迎转载、转载请注明出处、
http://blog.csdn.net/odustggg/article/details/8195137


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




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

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

[cpp] view
plaincopy

1. Generating the lua<-->C bindings with tolua++

tolua++.exe -tCocos2d -o LuaCocos2d.cpp Cocos2d.pkg

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

[cpp] view
plaincopy

-----------------------------------------createCpp.bat---------------------------

@echo on

E:\gkh_netdisk\tools\tolua++\tolua++.exe -o testCtoLua.cpp testCtoLua.pkg

@pause

---------------------------------------------------------------------------------

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

[cpp] view
plaincopy

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类做个测试

[cpp] view
plaincopy

----------- 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中的关键代码是这些:

[cpp] view
plaincopy

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中使用这个接口了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: