Cocos 2.2.1 + cocos2d-x 3.5 集成protobuf

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

我的安装如下


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

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

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

  1. #ifndef__LUA_PBC_EXTRA_H_
  2. #define__LUA_PBC_EXTRA_H_
  3. #ifdefined(_USRDLL)
  4. #defineLUA_EXTENSIONS_DLL__declspec(dllexport)
  5. #else/*useaDLLlibrary*/
  6. #defineLUA_EXTENSIONS_DLL
  7. #endif
  8. #if__cplusplus
  9. extern"C"{
  10. #include"lauxlib.h"
  11. intLUA_EXTENSIONS_DLLluaopen_protobuf_c(lua_State*L);
  12. }
  13. #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" 并添加以下代码

copy

    staticintbsReadFile(lua_State*L)
  1. {
  2. constchar*buff=luaL_checkstring(L,-1);
  3. Datadata=CCFileUtils::getInstance()->getDataFromFile(buff);
  4. lua_pushlstring(L,(char*)data.getBytes(),data.getSize());
  5. return1;/*numberofresults*/
  6. //Ifyouwanttousepackagesmanagertoinstallmorepackages,
  7. //don'tmodifyorremovethisfunction
  8. intregister_all_packages()
  9. {
  10. lua_State*L=LuaEngine::getInstance()->getLuaStack()->getLuaState();
  11. luaopen_protobuf_c(L);
  12. lua_register(L,"bsReadFile",bsReadFile);
  13. return0;//flagforpackagesmanager
  14. }

运行编译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] copy
    localMainScene=class("MainScene",cc.load("mvc").ViewBase)
  1. --MainScene.RESOURCE_FILENAME="MainScene.csb"
  2. functionMainScene:onCreate()
  3. --printf("resourcenode=%s",tostring(self:getResourceNode()))
  4. localroot=cc.csloader:createNode("MainScene.csb")
  5. root:addTo(self)
  6. localpbFilePath=cc.FileUtils:getInstance():fullPathForFilename("res/addressbook.pb")
  7. release_print("PBfilepath:"..pbFilePath)
  8. localpb=require"protobuf"
  9. localbuffer=bsReadFile(pbFilePath)
  10. pb.register(buffer)
  11. localstringbuffer=pb.encode("tutorial.Person",
  12. name="Alice",248)"> id=12345,
  13. phone={
  14. number="87654321"
  15. },248)"> })
  16. localslen=string.len(stringbuffer)
  17. localtemp=""
  18. fori=1,slendo
  19. temp=temp..string.format("0x%02X,",string.byte(stringbuffer,i))
  20. end
  21. release_print(temp)
  22. localresult=pb.decode("tutorial.Person",stringbuffer)
  23. release_print("resultname:"..result.name)
  24. returnMainScene

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

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

运行输出如下

OK,成功了


下面集成到android中

打开Android.mk文件

修改内容如下

copy
    LOCAL_PATH:=$(callmy-dir)
  1. include$(CLEAR_VARS)
  2. LOCAL_MODULE:=cocos2dlua_shared
  3. LOCAL_MODULE_FILENAME:=libcocos2dlua
  4. FILE_LIST:=hellolua/main.cpp
  5. FILE_LIST+=$(wildcard$(LOCAL_PATH)/../../Classes/*.cpp)
  6. FILE_LIST+=$(wildcard$(LOCAL_PATH)/../../Classes/ide-support/*.cpp)
  7. FILE_LIST+=$(wildcard$(LOCAL_PATH)/../../Classes/ide-support/*.c)
  8. #添加
  9. FILE_LIST+=$(wildcard$(LOCAL_PATH)/../../Classes/pbc/binding/lua/*.c)
  10. FILE_LIST+=$(wildcard$(LOCAL_PATH)/../../Classes/pbc/src/*.c)
  11. LOCAL_SRC_FILES:=$(FILE_LIST:$(LOCAL_PATH)/%=%)
  12. LOCAL_C_INCLUDES:=$(LOCAL_PATH)/../../Classes
  13. LOCAL_C_INCLUDES+=$(LOCAL_PATH)/../../Classes/pbc
  14. LOCAL_C_INCLUDES+=$(LOCAL_PATH)/../../Classes/pbc/src
  15. LOCAL_STATIC_LIBRARIES:=cocos2d_lua_static
  16. LOCAL_STATIC_LIBRARIES+=cocos2d_simulator_static
  17. include$(BUILD_SHARED_LIBRARY)
  18. $(callimport-module,scripting/lua-bindings/proj.android/prebuilt-mk)
  19. $(callimport-module,tools/simulator/libsimulator/proj.android/prebuilt-mk)

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

相关文章

    本文实践自 RayWenderlich、Ali Hafizji 的文章《...
Cocos-code-ide使用入门学习地点:杭州滨江邮箱:appdevzw@1...
第一次開始用手游引擎挺激动!!!进入正题。下载资源1:从C...
    Cocos2d-x是一款强大的基于OpenGLES的跨平台游戏开发...
1.  来源 QuickV3sample项目中的2048样例游戏,以及最近《...
   Cocos2d-x3.x已经支持使用CMake来进行构建了,这里尝试...