Cocos 2.2.1 + cocos2d-x 3.5 集成protobuf
来源:互联网 发布:海康网络摄像机ip地址 编辑:程序博客网 时间:2024/06/05 14:09
在Cocos商店里下载cocos2d-x框架,NDK,SDK
我的安装如下
云风pbc https://github.com/cloudwu/pbc
下载下来为pbc-master 改成pbc,内容如下pbc-lua.h是后来加的,
如图,新建一个pbc-lua.h,内容如下
#ifndef __LUA_PBC_EXTRA_H_#define __LUA_PBC_EXTRA_H_#if defined(_USRDLL) #define LUA_EXTENSIONS_DLL __declspec(dllexport)#else /* use a DLL library */ #define LUA_EXTENSIONS_DLL#endif#if __cplusplusextern "C" {#endif#include "lauxlib.h"int LUA_EXTENSIONS_DLL luaopen_protobuf_c(lua_State *L); #if __cplusplus}#endif#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" 并添加以下代码
static int bsReadFile(lua_State *L){const char *buff = luaL_checkstring(L, -1);Data data = CCFileUtils::getInstance()->getDataFromFile(buff);lua_pushlstring(L, (const char*)data.getBytes(), data.getSize());return 1; /* number of results */}// If you want to use packages manager to install more packages, // don't modify or remove this functionstatic int register_all_packages(){lua_State *L = LuaEngine::getInstance()->getLuaStack()->getLuaState();luaopen_protobuf_c(L);lua_register(L,"bsReadFile",bsReadFile); return 0; //flag for packages manager}
运行编译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 文件,修改如下
local MainScene = class("MainScene", cc.load("mvc").ViewBase)--MainScene.RESOURCE_FILENAME = "MainScene.csb"function MainScene:onCreate() --printf("resource node = %s", tostring(self:getResourceNode())) local root = cc.CSLoader:createNode("MainScene.csb") root:addTo(self) local pbFilePath = cc.FileUtils:getInstance():fullPathForFilename("res/addressbook.pb") release_print("PB file path: "..pbFilePath) local pb = require "protobuf" local buffer = bsReadFile(pbFilePath) pb.register(buffer) local stringbuffer = pb.encode("tutorial.Person", { name = "Alice", id = 12345, phone = { { number = "87654321" }, } }) local slen = string.len(stringbuffer) local temp = "" for i=1, slen do temp = temp .. string.format("0x%02X, ", string.byte(stringbuffer, i)) end release_print(temp) local result = pb.decode("tutorial.Person", stringbuffer) release_print("result name: "..result.name)endreturn MainScene
使用release_print是因为,重新构建win32模拟器时,有时候print之类的输出会失效,这个是cocos2d-x 3.5 BUG,解决方法就是先用这个
encode 表示序列化 decode 表示反序列化
运行输出如下
OK,成功了
下面集成到android中
打开Android.mk文件
修改内容如下
LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE := cocos2dlua_sharedLOCAL_MODULE_FILENAME := libcocos2dluaFILE_LIST := hellolua/main.cppFILE_LIST += $(wildcard $(LOCAL_PATH)/../../Classes/*.cpp)FILE_LIST += $(wildcard $(LOCAL_PATH)/../../Classes/ide-support/*.cpp)FILE_LIST += $(wildcard $(LOCAL_PATH)/../../Classes/ide-support/*.c)#添加FILE_LIST += $(wildcard $(LOCAL_PATH)/../../Classes/pbc/binding/lua/*.c)FILE_LIST += $(wildcard $(LOCAL_PATH)/../../Classes/pbc/src/*.c)LOCAL_SRC_FILES := $(FILE_LIST:$(LOCAL_PATH)/%=%)LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../Classes#添加LOCAL_C_INCLUDES += $(LOCAL_PATH)/../../Classes/pbcLOCAL_C_INCLUDES += $(LOCAL_PATH)/../../Classes/pbc/srcLOCAL_STATIC_LIBRARIES := cocos2d_lua_staticLOCAL_STATIC_LIBRARIES += cocos2d_simulator_staticinclude $(BUILD_SHARED_LIBRARY)$(call import-module,scripting/lua-bindings/proj.android/prebuilt-mk)$(call import-module,tools/simulator/libsimulator/proj.android/prebuilt-mk)
这样就可以正确将protobuf源码集成到.so文件中
- Cocos 2.2.1 + cocos2d-x 3.5 集成protobuf
- Cocos 2.2.1 + cocos2d-x 3.5 集成protobuf
- ios 平台 cocos2d-x 集成 protobuf
- ios 平台 cocos2d-x 集成 protobuf
- quick-cocos2d-x 集成 google protobuf 方法
- Quick-Cocos2d-x 集成 Google protobuf 方法
- quick-cocos2d-x 集成 google protobuf 方法
- Windows 7 下 Quick-Cocos2d-x 3.3 集成 protobuf
- cocos2d-lua 集成protobuf
- cocos2d-x 3.5 一些cocos命令
- [寒江孤叶丶的Cocos2d-x之旅_29]在Cocos2d-x中集成protobuf (Protocol Buffers)
- Cocos2d-x Protobuf 的使用
- [Cocos2d-x][Cocos小技巧][1][触摸屏蔽]
- MFC集成cocos2d-x
- cocos2d-x-3.13\cocos\ui控件Button
- cocos2d-x-3.13\cocos\ui控件CheckBox
- cocos2d-x-3.13\cocos\ui控件TextAtlas
- cocos2d-x-3.13\cocos\ui控件ImageView
- Python对数组的基本操作
- 二分查找
- ios真机调试之二真机测试
- 搜索引擎-倒排索引基础知识
- openwrt 的串口与网络通信
- Cocos 2.2.1 + cocos2d-x 3.5 集成protobuf
- AIX巡检脚本
- 连接查询
- Android Fragment 真正的完全解析(下)
- android 源码环境搭建
- js 常用日期控件使用
- ZOJ 2112 Dynamic Rankings (动态区间第K大) (线段树套SBT+二分)
- Matlab——zeros函数和ones函数
- centos install rtl8188CUS wlan driver