在Quick-cocos2dx中使用云风pbc解析Protocol Buffers,支持win、mac、ios、android
本例主要介绍 如何将 pbc 集成到quick-cocos2dx框架中,让我们的cocos2dx客户端Lua拥有编解码Protocol Buffers能力。
参考:云风pbc的用法:http://www.cnblogs.com/ghost240/archive/2013/08/12/3253092.html本例使用的项目位置:https://github.com/miaodadao/pbc 框架Quick-cocos2dx官网:http://cn.quick-x.com/pb文件生成工具:https://code.google.com/p/protobuf/downloads/list ,本例下载:protoc-2.4.1-win32.zip
大纲:pb文件生成脚本编写pbc项目简易修改集成到相关平台:
集成到win的x-player集成到mac的x-player集成到ios、ipad的quick-cocos2dx项目中集成到android的quick-cocos2dx项目中项目pbc使用方法
@echo offset DIR=%~dp0cd /d "%DIR%"setlocal enabledelayedexpansionfor /r %%i in (*.proto) do (
set pbname=%%i
set pbname=!pbname:~0,-5!b
protoc -I %DIR% --descriptor_set_out !pbname! %%i )echo "finished"
#ifndef __LUA_PBC_EXTRA_H_#define __LUA_PBC_EXTRA_H_第二步:修改pbc项目中 binding\lua\pbc-lua.c 文件,添加上一步定义的头文件: 在 #include "../../pbc.h" 后面添加 #include "../../pbc-lua.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
LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)
LOCAL_MODULE := quickextenpbcLOCAL_MODULE_FILENAME := libquickextenpbc
LOCAL_EXPORT_CFLAGS := -Wno-psabi -DUSE_FILE32API -DCC_LUA_ENGINE_ENABLED=1 -DDEBUG=1 -DCOCOS2D_DEBUG=1LOCAL_CFLAGS := -Wno-psabi -DUSE_FILE32API -DCC_LUA_ENGINE_ENABLED=1 -DDEBUG=1 -DCOCOS2D_DEBUG=1
LOCAL_WHOLE_STATIC_LIBRARIES := lua_pbc
include $(BUILD_STATIC_LIBRARY)$(call import-module,pbc-master)
LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)
LOCAL_MODULE := lua_pbcLOCAL_MODULE_FILENAME := liblua_pbc
LOCAL_SRC_FILES := \ src/alloc.c \src/array.c \src/bootstrap.c \src/context.c \src/decode.c \src/map.c \src/pattern.c \src/proto.c \src/register.c \src/rmessage.c \src/stringpool.c \src/varint.c \src/wmessage.c \binding/lua/pbc-lua.c \
LOCAL_C_INCLUDES+= \
src \
在quick-cocos2dx 创建的项目的proj.android下修改build_native.bat: 在脚本的最后找到 NDK_MODULE_PATH 为此变量添加 pbc项目 所在的文件目录,即pbc-master的上一级路径 最后修改项目的proj.android\jni\Android.mk文件 添加pbc模块,内容如下:
LOCAL_CFLAGS := -Wno-psabi -DUSE_FILE32API -DCC_LUA_ENGINE_ENABLED=1 -DDEBUG=1 -DCOCOS2D_DEBUG=1LOCAL_WHOLE_STATIC_LIBRARIES := cocos_lua_staticinclude $(BUILD_STATIC_LIBRARY)$(call import-module,scripting/lua/proj.android)
LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE := game_sharedLOCAL_MODULE_FILENAME := libgameLOCAL_SRC_FILES := hellocpp/main.cpp \ ../../sources/AppDelegate.cppLOCAL_C_INCLUDES := $(LOCAL_PATH)/../../sourcesLOCAL_CFLAGS += -Wno-psabi -DCC_LUA_ENGINE_ENABLED=1 -DDEBUG=1 -DCOCOS2D_DEBUG=1最后,核对android编译相关的环境变量,参考http://cn.quick-x.com/?p=253 保持编译,到此完成了pbc集成到android项目的工作。
LOCAL_WHOLE_STATIC_LIBRARIES := quickcocos2dxLOCAL_WHOLE_STATIC_LIBRARIES += quickextenpbc
include $(BUILD_SHARED_LIBRARY)
$(call import-module,lib/proj.android) \$(call import-module,luaproj.android)