Cocos 2.2.1 + cocos2d-x 3.5 集成protobuf

18 篇文章 0 订阅
3 篇文章 0 订阅

在Cocos商店里下载cocos2d-x框架,NDK,SDK

我的安装如下



云风pbc https://github.com/cloudwu/pbc

下载下来为pbc-master 改成pbc,内容如下pbc-lua.h是后来加的,


如图,新建一个pbc-lua.h,内容如下

[cpp]  view plain  copy
  1. #ifndef __LUA_PBC_EXTRA_H_  
  2. #define __LUA_PBC_EXTRA_H_  
  3.   
  4. #if defined(_USRDLL)  
  5.     #define LUA_EXTENSIONS_DLL     __declspec(dllexport)  
  6. #else         /* use a DLL library */  
  7.     #define LUA_EXTENSIONS_DLL  
  8. #endif  
  9.   
  10. #if __cplusplus  
  11. extern "C" {  
  12. #endif  
  13.   
  14. #include "lauxlib.h"  
  15.   
  16. int LUA_EXTENSIONS_DLL luaopen_protobuf_c(lua_State *L);  
  17.       
  18. #if __cplusplus  
  19. }  
  20. #endif  
  21. #endif  


pbc目录\binding\lua\pbc-lub.c#include "pbc.h"下添加#include "pbc-lua.h"




vs2012打开Cocos1\frameworks\runtime-src\proj.win32\Cocos1.sln

Cocos1是我项目名称,换成你项目名称


将pbc这个目录放到Class目录下



右键解决方案Cocos1->添加->现有项目,选择pbc目录\pbc.vxcproj


1. 右键pbc项目->添加->现有项,选择pbc目录下的pbc-lua.h

pbc目录\binding\lua\pbc-lua.c




 右键pbc项目->属性->配置属性->C/C++->常规->附加包含目录:$(COCOS_FRAMEWORKS)\cocos2d-x-3.5\external\lua\luajit\include




右键pbc项目->属性->配置属性->C/C++->常规-->输出目录 中 $(SolutionDir)$(Configuration).win32\



右键pbc项目->生成



右键Cocos1项目->属性->通用属性->框架和引用->添加新引用,选择pbc,点确定




右键Cocos1项目->属性->配置属性->C/C++->附加包含目录,添加包含$(ProjectDir)..\Classes\pbc并确定




1. 右键Cocos1项目->属性->配置属性->链接器->输入->附加依赖项,添加pbc.lib并确定




AppDelegate.cpp中添加#include "pbc-lua.h" 并添加以下代码

[cpp]  view plain  copy
  1. static int bsReadFile(lua_State *L)  
  2. {  
  3.     const char *buff = luaL_checkstring(L, -1);  
  4.     Data data = CCFileUtils::getInstance()->getDataFromFile(buff);  
  5.     lua_pushlstring(L, (const char*)data.getBytes(), data.getSize());  
  6.     return 1; /* number of results */  
  7. }  
  8.   
  9.   
  10. // If you want to use packages manager to install more packages,   
  11. // don't modify or remove this function  
  12. static int register_all_packages()  
  13. {  
  14.     lua_State *L = LuaEngine::getInstance()->getLuaStack()->getLuaState();  
  15.     luaopen_protobuf_c(L);  
  16.   
  17.     lua_register(L,"bsReadFile",bsReadFile);  
  18.     return 0; //flag for packages manager  
  19. }  

 运行编译Cocos1项目,这样就将protubuf加入win32的模拟器中了


下面是cocos code ide 方面

先把3.5框架设置好,如下





上图中,SDK,NDK设置成你用Cocos中商店下载的,JDK,ANT,PYTHON随便你了


pbc目录\binding\lua\protobuf.lua拷贝到res目录下




解压缩protoc-2.5.0-win32.zip 下载地址 http://pan.baidu.com/s/1c04ezcO ,将addressbook.pb拷贝到新建的工程的res目录下,图就不上了,看上图,就在protobuf.lua下面,

protoc-2.5.0-win32.zip里面有个工具,可以将.proto文件变成.pb文件,这样才能再lua中用,.proto文件不能再lua中用,在C++中,.proto文件要转换成.h,.cc文件,


打开src\app\views\MainScene.lua 文件,修改如下

[plain]  view plain  copy
  1. local MainScene = class("MainScene", cc.load("mvc").ViewBase)  
  2.   
  3. --MainScene.RESOURCE_FILENAME = "MainScene.csb"  
  4.   
  5. function MainScene:onCreate()  
  6.     --printf("resource node = %s", tostring(self:getResourceNode()))  
  7.     local root = cc.CSLoader:createNode("MainScene.csb")  
  8.     root:addTo(self)  
  9.   
  10.     local pbFilePath = cc.FileUtils:getInstance():fullPathForFilename("res/addressbook.pb")  
  11.     release_print("PB file path: "..pbFilePath)  
  12.   
  13.     local pb = require "protobuf"  
  14.     local buffer = bsReadFile(pbFilePath)  
  15.   
  16.     pb.register(buffer)  
  17.     local stringbuffer = pb.encode("tutorial.Person",  
  18.         {  
  19.             name = "Alice",  
  20.             id = 12345,  
  21.             phone = {  
  22.                 {  
  23.                     number = "87654321"  
  24.                 },  
  25.             }  
  26.         })  
  27.   
  28.     local slen = string.len(stringbuffer)  
  29.     local temp = ""  
  30.     for i=1, slen do  
  31.         temp = temp .. string.format("0x%02X, ", string.byte(stringbuffer, i))  
  32.     end  
  33.     release_print(temp)  
  34.     local result = pb.decode("tutorial.Person", stringbuffer)  
  35.     release_print("result name: "..result.name)  
  36. end  
  37.   
  38. return MainScene  

使用release_print是因为,重新构建win32模拟器时,有时候print之类的输出会失效,这个是cocos2d-x 3.5 BUG,解决方法就是先用这个

encode 表示序列化    decode 表示反序列化

运行输出如下



OK,成功了


下面集成到android中


打开Android.mk文件



修改内容如下

[plain]  view plain  copy
  1. LOCAL_PATH := $(call my-dir)  
  2.   
  3. include $(CLEAR_VARS)  
  4.   
  5. LOCAL_MODULE := cocos2dlua_shared  
  6.   
  7. LOCAL_MODULE_FILENAME := libcocos2dlua  
  8.   
  9. FILE_LIST := hellolua/main.cpp  
  10. FILE_LIST += $(wildcard $(LOCAL_PATH)/../../Classes/*.cpp)  
  11. FILE_LIST += $(wildcard $(LOCAL_PATH)/../../Classes/ide-support/*.cpp)  
  12. FILE_LIST += $(wildcard $(LOCAL_PATH)/../../Classes/ide-support/*.c)  
  13.   
  14. #添加  
  15. FILE_LIST += $(wildcard $(LOCAL_PATH)/../../Classes/pbc/binding/lua/*.c)  
  16. FILE_LIST += $(wildcard $(LOCAL_PATH)/../../Classes/pbc/src/*.c)  
  17.   
  18. LOCAL_SRC_FILES := $(FILE_LIST:$(LOCAL_PATH)/%=%)  
  19.   
  20. LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../Classes  
  21.   
  22. #添加  
  23. LOCAL_C_INCLUDES += $(LOCAL_PATH)/../../Classes/pbc  
  24. LOCAL_C_INCLUDES += $(LOCAL_PATH)/../../Classes/pbc/src  
  25.   
  26. LOCAL_STATIC_LIBRARIES := cocos2d_lua_static  
  27. LOCAL_STATIC_LIBRARIES += cocos2d_simulator_static  
  28.   
  29. include $(BUILD_SHARED_LIBRARY)  
  30.   
  31. $(call import-module,scripting/lua-bindings/proj.android/prebuilt-mk)  
  32. $(call import-module,tools/simulator/libsimulator/proj.android/prebuilt-mk)  


这样就可以正确将protobuf源码集成到.so文件中

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值