本例主要介绍 如何将 pbc 集成到quick-cocos2dx框架中,让我们的cocos2dx客户端Lua拥有编解码Protocol Buffers能力。
参考:
本例使用的项目位置:
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使用方法

pb文件生成脚本编写
下载protoc-2.4.1-win32.zip 解压到存放proto文件的目录,
https://code.google.com/p/protobuf/downloads/list 
在存放proto文件的位置编写生成protobin的脚本,本例使用win脚本bat.  pbcreate.bat 内容如下:
@echo off
set DIR=%~dp0
cd /d "%DIR%"
setlocal enabledelayedexpansion
for /r %%i in (*.proto) do ( 
set pbname=%%i

set pbname=!pbname:~0,-5!b

   
  protoc -I %DIR% --descriptor_set_out !pbname! %%i 
)
echo "finished"

pbc项目简易修改
1、下载克隆pbc项目,地址:
https://github.com/miaodadao/pbc 
2、修改项目:
    第一步: 在项目根
目录pbc-master下添加注册绑定Lua接口的头文件:pub-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 __cplusplus
extern "C" {
#endif

#include "lauxlib.h"

int LUA_EXTENSIONS_DLL luaopen_protobuf_c(lua_State *L);
    
#if __cplusplus
}
#endif
#endif
     第二步:修改pbc项目中 binding\lua\pbc-lua.c 文件,添加上一步定义的头文件:
    在 #include "../../pbc.h" 后面添加 #include "../../pbc-lua.h"

集成到相关平台
1、打开quick-cocos2dx 项目的quick-x-player_2010.sln解决方案,集成到win的x-player:
      参考:
http://cn.quick-x.com/?p=253  Step 6: 编译 quick-x-player proj.win32 工程
    保证当前player功能能够编译,我的环境是vs2010,接下来再导入pbc项目,步骤如下:
    首先尝试在player的解决方案中添加现有项目,选择pbc项目下 pbc.vcxproj 文件,如果编译不正常则考虑自己新建空项目,然后在项目中导入pbc项目的所有源码,其项目属性配置可以直接参考player解决方案中 lua_extension_201x 的属性配置
    导入的pbc.vcxproj 项目后,要保证pbc.vcxproj 中包含进来pub-lua.h 
    接下来修改quick-x-player_201x项目属性:

    右键quick-x-player_201x项目>>属性>>通用属性>>添加新引用>>选择刚导入的pbc项目>>确定
    修改quick-x-player_201x项目的AppDelegate.cpp ,导入pbc的lua接口。
    添加pub-lua.h这个头文件,根据自己项目位置调整导入路径:

    #include "../../../lua_self_extensions/pbc-master/pbc-lua.h"
    注册pbc接口代码:在bool AppDelegate::applicationDidFinishLaunching()函数中的 luaopen_cocos2dx_extra_luabinding(L);添加代码:luaopen_protobuf_c(L);
    保存编译,到此完成了pbc在win的xplayer中的集成。

2、打开quick-cocos2dx 项目的quick-x-player.xcodeproj工程,集成到mac的x-player:
    展开项目在quickcocos2dx.xcodeproj\libquickcocos2dx 上右键菜单NewGroup>> 新建名为pbc的分组>>右键pbc选择Add Files to “quickcocos2dx.xcodeproj”... 菜单>>先选中 Create group for any added folders>>然后在选择框中切换到pbc项目目录>>选中binding、src、tool三个目录及pbc.h和pbc-lua.h两个头文件>>Add到项目中
    修改项目的AppDelegate.cpp ,导入pbc的lua接口,由于此文件修改方法与上一步相同,此处省略
     保存编译,到此完成了pbc在mac的xplayer中的集成。

3、打开quick-cocos2dx 创建的项目的proj.ios目录下的工程,集成pbc到项目中
    展开项目工程,在quickcocos2dx.xcodeproj\libquickcocos2dx 上右键菜单NewGroup,后续操作与上一步相同
    修改项目的AppDelegate.cpp ,导入pbc的lua接口,与上一步相同
    保存编译,到此完成了pbc在ios项目中的集成。

4、添加pbc集成到android的quick-cocos2dx项目中
    pbc项目的目录名称为pbc-master,在与pbc同级的目录,新建文件夹luaproj.android,在luaproj.android下添加Android.mk文件,内容如下:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)

LOCAL_MODULE := quickextenpbc
LOCAL_MODULE_FILENAME := libquickextenpbc

LOCAL_EXPORT_CFLAGS := -Wno-psabi -DUSE_FILE32API -DCC_LUA_ENGINE_ENABLED=1 -DDEBUG=1 -DCOCOS2D_DEBUG=1
LOCAL_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)

    在pbc的目录pbc-master下添加Android.mk文件,内容如下
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)

LOCAL_MODULE := lua_pbc
LOCAL_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 \


LOCAL_CFLAGS := -Wno-psabi -DUSE_FILE32API -DCC_LUA_ENGINE_ENABLED=1 -DDEBUG=1 -DCOCOS2D_DEBUG=1
LOCAL_WHOLE_STATIC_LIBRARIES := cocos_lua_static
include $(BUILD_STATIC_LIBRARY)
$(call import-module,scripting/lua/proj.android)
    在quick-cocos2dx 创建的项目的proj.android下修改build_native.bat:
        在脚本的最后找到 NDK_MODULE_PATH 为此变量添加 pbc项目 所在的文件目录,即pbc-master的上一级路径
    最后修改项目的proj.android\jni\Android.mk文件 添加pbc模块,内容如下:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := game_shared
LOCAL_MODULE_FILENAME := libgame
LOCAL_SRC_FILES := hellocpp/main.cpp \
    ../../sources/AppDelegate.cpp
LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../sources
LOCAL_CFLAGS += -Wno-psabi -DCC_LUA_ENGINE_ENABLED=1 -DDEBUG=1 -DCOCOS2D_DEBUG=1

LOCAL_WHOLE_STATIC_LIBRARIES := quickcocos2dx
LOCAL_WHOLE_STATIC_LIBRARIES += quickextenpbc

include $(BUILD_SHARED_LIBRARY)

$(call import-module,lib/proj.android) \
$(call import-module,luaproj.android)

        最后,核对android编译相关的环境变量,参考
http://cn.quick-x.com/?p=253 
        保持编译,到此完成了pbc集成到android项目的工作。

项目pbc使用方法 
    将pbc项目的pbc-master\binding\lua\protobuf.lua复制到自己项目的res/scripts/目录下,
    将proto文件编译后的.pb文件拷贝到自己项目的res/目录下
    使用参考:
    https://github.com/miaodadao/pbc
    云风博客http://blog.codingnow.com/2011/12/pbc_lua_binding.html
    

在Quick-cocos2dx中使用云风pbc解析Protocol Buffers,支持win、mac、ios、android的更多相关文章

  1. cocos2d-x 3.1 集成 云风pbc

    cocos2d-x 3.x版本号变动比較大,从改用cmake管理整个项目,到使用python集成一体化的项目工具. 这些都是我喜欢的.我能够非常easy的在我的ubuntu上面搭建好开发环境,并且根本 ...

  2. (原)Ubuntu16中卸载并重新安装google的Protocol Buffers

    转载请注明出处: http://www.cnblogs.com/darkknightzh/p/5782992.html 目前最新的是1.6.1 1. 卸载掉老版本的Protocol: sudo apt ...

  3. 云风pbc源码alloc.c

    #include <stdlib.h> #include <stdio.h> // 用于统计内存的申请和释放次数匹配 ; void * _pbcM_malloc(size_t ...

  4. 【记录一个问题】云风的协程库 c conroutine无法在android下链接通过

    链接出现以下错误: coroutine.c:139: undefined reference to `getcontext' coroutine.c:146: undefined reference ...

  5. Quick Cocos2dx Http通讯

    服务端:Python 通讯协议:Http 参考文章: 1 用python实现一个基本的http server服务器 http://blog.sina.com.cn/s/blog_416e3063010 ...

  6. quick cocos2dx 3.x 配置win32工程

    公司项目主体部分用c++,而ui部分用lua写,所以选择了用quick框架.项目先开发了ios/mac版,这两天试着配置其win32工程,遇到一些问题,记录一下(纯c++版本cocos2dx配置方法应 ...

  7. 转:云风skynet服务端框架研究

    转:  http://forthxu.com/blog/skynet.html skynet是云风编写的服务端底层管理框架,底层由C编写,配套lua作为脚本使用,可换python等其他脚本语言.sky ...

  8. quick cocos2d-x 入门---井字棋

    学习quick cocos2d-x 第二天 ,使用quick-x 做了一个井字棋游戏 . 我假设读者已经 http://wiki.quick-x.com/doku.php?id=zh_cn阅读了这个链 ...

  9. 对云风 cstring 第二次解析

    前言 从明天起 关心粮食和蔬菜 我有一所房子 面朝大海 春暖花开 本文前提条件 1.了解 posix 线程 2.了解 原子操作 3.具备简单C基础,或者 你也敲一遍. 如果上面不太清楚,你可以翻看我以 ...

随机推荐

  1. xubuntu14.04截图,彻底到Linux一个半月后记

        前言 自学计算机技术,越到后面,越依赖ubuntu,以致于很多时候都是一开机就打开虚拟机上的ubuntu10.04,Linux已经变得越来越重要了. 2014-04-17,ubuntu14.0 ...

  2. 使用jQuery实现跨域提交表单数据

    我们在WEB开发中有时会遇到这种情况,比如要从A网站收集用户信息,提交给B网站处理,这个时候就会涉及到跨域提交数据的问题.本文将给您介绍如何使用jQuery来实现异步跨域提交表单数据.   在jQue ...

  3. Java线程运行轨迹-代码追踪与定位

    今天在写程序时,想到一个问题,当我的程序出异常的时候,控制台输出信息中,明确指出了出现异常的位置,并详细列举了函数的调用层次关系,它是怎么做到的. 竟然想到了这个问题,就去查看了源代码,不过没点几下, ...

  4. echshop jquery与transpart冲突解决?

    <script type="text/javascript">$(function() {window.__Object_toJSONString = Object.p ...

  5. 那些年被我坑过的Python——一夫当关 第十三章(堡垒机初步设计)

      堡垒机架构 堡垒机的主要作用权限控制和用户行为审计,堡垒机就像一个城堡的大门,城堡里的所有建筑就是你不同的业务系统 , 每个想进入城堡的人都必须经过城堡大门并经过大门守卫的授权,每个进入城堡的人必 ...

  6. 使用ToUpperInvariant避免使用ToUpper

    ToUpperInvariant使用不依赖于区域性进行转换,而ToUpper则使用了当前线程的CultureInfo,进行转换,所以性能会有所影响,以下为测试: [Test] public void ...

  7. 转:100个高质量Java开发者博客

    原文来自于:http://www.importnew.com/7469.html ImportNew注:原文中还没有100个.作者希望大家一起来推荐高质量的Java开发博客,然后不段补充到这个列表.欢 ...

  8. House of hello恶搞凯莉迷你包

    欧洲站 House of hello恶搞凯莉迷你包 最近淘宝卖的很疯,看看价格,俺咂舌不已 :1300-1600 今年迷你包卖的很疯我是知道的,迷你包今年没有买一个也是不行的! 剔除暴利,便宜的亲们不 ...

  9. [Forward]Use the SharePoint My Tasks Web Part outside of My Sites

    from http://yalla.itgroove.net/2014/04/use-sharepoint-tasks-web-part-outside-sites/ Use the SharePoi ...

  10. 线性链表的双向链表——java实现

    .线性表链式存储结构:将采用一组地址的任意的存储单元存放线性表中的数据元素. 链表又可分为: 单链表:每个节点只保留一个引用,该引用指向当前节点的下一个节点,没有引用指向头结点,尾节点的next引用为 ...