利用tolua++编译pkg,以便让Lua使用cpp自定义类

转自:https://blog.csdn.net/song_hui_xiang/article/details/15712417

1、创建自定义类SongCpp.cpp

SongCpp.h
[cpp]  view plain  copy
  1. #ifndef __SongToLua__SongCpp__  
  2. #define __SongToLua__SongCpp__  
  3.   
  4. #include <iostream>  
  5. #include "cocos2d.h"  
  6. using namespace cocos2d;  
  7.   
  8. class SongCpp : public CCSprite {  
  9. public:  
  10.     static SongCpp* createSongImage(const char* fileName);  
  11.     CCLabelTTF* createSongName(const char* name,int fontSize);  
  12. };  
  13.   
  14. #endif /* defined(__SongToLua__SongCpp__) */  
SongCpp.cpp
[cpp]  view plain  copy
  1. #include "SongCpp.h"  
  2. SongCpp* SongCpp::createSongImage(const char *fileName){  
  3.     SongCpp* sp = new SongCpp();  
  4.     if (sp && sp->initWithFile(fileName)) {  
  5.         sp->autorelease();  
  6.         return sp;  
  7.     }  
  8.     CC_SAFE_DELETE(sp);  
  9.     return NULL;  
  10. }  
  11.   
  12. CCLabelTTF* SongCpp::createSongName(const char *name,int fontSize){  
  13.     CCLabelTTF* name_sp = CCLabelTTF::create(name, "Arial", fontSize);  
  14.     return name_sp;  
  15. }  

2、通过自定义类.h(头文件)制作 pkg

在cocos2dx引擎cocos2d-x-2.1.4/tools/tolua++下有编写pkg文件规则说明README文件,翻译如下:

[plain]  view plain  copy
  1. Writing .pkg files  
  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 //删除内联关键字声明和实现  
  5. 4) remove public protect and private //删除访问限定词  
  6. 5) remove the decalration of class member variable //删除成员变量  
  7. 6) keep static keyword //保留静态关键词  
  8. 7) remove memeber functions that declared as private or protected //非public的函数都删除  

首先通过xcode生成pkg文件或者纯文本文件(后缀改成.pkg)即可,我的SongCpp.pkg如下:

[cpp]  view plain  copy
  1. class SongCpp : public CCSprite {  
  2.     static SongCpp* createSongImage(const char* fileName);  
  3.     CCLabelTTF* createSongName(const char* name,int fontSize);  
  4. };  

然后把SongCpp.pkg文件放到目录/Users/xiangzi/Documents/cocos2d-x-2.1.4/tools/tolua++下 ,在Cocos2d.pkg中注册你的pkg文件,在此文件中的pkg都是会被编译的,如图11:


再找到build.sh文件,修改下列两个路径,如图7:


TOLUA= 为tolua++目录下的tolua++工具    ${TOLUA}  为生成的LuaCocos2d.cpp所放的路径,我们直接把它放到项目中。
接着打开终端,cd到tolua++目录下,输入make命令回车。如图8:


打开项目中新生成的LuaCocos2d.cpp文件,搜索自定义类SongCpp,如果搜到则证明成功,如图9:


然后再打开LuaCocos2d.h,导入我们的自定义类SongCpp.h

[cpp]  view plain  copy
  1. #ifndef __LUACOCOS2D_H_  
  2. #define __LUACOCOS2D_H_  
  3.   
  4. #ifdef __cplusplus  
  5.   
  6. #include "SongCpp.h"  
  7.   
  8. extern "C" {  
  9. #endif  
  10. #include "tolua++.h"  
  11. #ifdef __cplusplus  
  12. }  
  13. #endif  
  14.   
  15. TOLUA_API int tolua_Cocos2d_open(lua_State* tolua_S);  
  16.   
  17. #endif // __LUACOCOS2D_H_  

3、Lua项目中使用自定义类:

[cpp]  view plain  copy
  1. local size = CCDirector:sharedDirector():getWinSize()  
  2. local mainLayer = CCLayer:create()  
  3.   
  4. local song_image = SongCpp:createSongImage("xiangzi.png")  
  5. song_image:setPosition(ccp(size.width*0.5,size.height*0.5))  
  6. mainLayer:addChild(song_image)  
  7.   
  8. local song_name = song_image:createSongName("song_huixiang",50)  
  9. song_name:setPosition(ccp(size.width*0.5,size.height*0.8))  
  10. mainLayer:addChild(song_name)  
  11.   
  12.   
  13. -- run  
  14. local sceneGame = CCScene:create()  
  15. sceneGame:addChild(mainLayer)  
  16. CCDirector:sharedDirector():runWithScene(sceneGame)  

运行结果如图10:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值