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

本文出自 “DustGgg” 博客,请务必保留此出处 http://blog.csdn.net/odustggg/article/details/8195137

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

标签: none

?>