欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

Quick-Cocos2d-x 集成 Google protobuf 方法

发布时间:2025/1/21 53 豆豆
生活随笔 收集整理的这篇文章主要介绍了 Quick-Cocos2d-x 集成 Google protobuf 方法 小编觉得挺不错的,现在分享给大家,帮大家做个参考.
第一步   需要最新的protobuf 类库和解析程序。  下载地址:https://github.com/sean-lin/protoc-gen-lua git clone https://github.com/sean-lin/protoc-gen-lua.git 到任意的一个地方

然后,可以得到重要的两个目录

 

1 2 protoc-gen-lua/plugin/  protoc-gen-lua/protobuf/

 

 

第二步, 需要使用protoc —lua_out=. 这种方法, 将我们自己的*.proto 的文件解析成lua文件

plugin目录是提供将buffer 文件解析成lua 版本的类库, 需要python 支持。  如果已经编译了google 官方的protoc 那个程序, 只需要在系统PATH环境变量总追加plugin目录就好:

 

1 export PATH={protoc-gen-lua DIR }/plugin:$PATH

 

关于protoc的编译另请google . 如果解析不出lua文件来, 可以手动志信一下plugin/protoc-gen-lua的程序, 他应该是+x 的权限(chmod +x plugin/protoc-gen-lua) 细节的安装步骤可以参考 https://code.google.com/p/protoc-gen-lua/ 第三步 , 将protobuf 集成到quick 中 protoc-gen-lua/protobuf/ 目录就是要编译到quick-cocos2d-x目录里面的部分。  现在, 我们只需要 protoc-gen-lua/protobuf/pb.c 这个文件 

先确定自己的quick-cocos2d-x lua扩展目录:

 

1 /quick-cocos2d-x/lib/cocos2d-x/scripting/lua/lua_extensions/

 

所有lua 的c/c++现成扩展,都可以直接放到这里。  将pb.c这个文件复制到 lua_extension目录下, 最好独立一个目录, 免得扩展多了乱。 

这是我的目录结构:

 

1 ./quick-cocos2d-x/lib/cocos2d-x/scripting/lua/lua_extensions/protobuf/pb.c

 

然后开始修改扩展程序配置文件, lua_extensions.c

路径为:

 

1 ./quick-cocos2d-x/lib/cocos2d-x/scripting/lua/lua_extensions/lua_extensions.c

 

目前是一个不足60行的小文件, 我打算全部贴进来:

 

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 #include "lua_extensions.h"      #if __cplusplus  extern "C" {  #endif       // cjson  #include "cjson/lua_cjson.h"            // zlib  #include "zlib/lua_zlib.h"            // lpack  #include "lpack/lpack.h"            // socket  #include "socket/luasocket.h"  #include "socket/mime.h"  #include "socket/socket_scripts.h"            // filesystem  #include "filesystem/lfs.h"            // lsqlite3  #include "lsqlite3/lsqlite3.h"            #include "protobuf/pb.c"   //引用protobuf 库文件            static luaL_Reg luax_exts[] = {       {"cjson", luaopen_cjson_safe},       {"zlib", luaopen_zlib},       {"pack", luaopen_pack},       {"socket.core", luaopen_socket_core},       {"mime.core", luaopen_mime_core},       {"lfs", luaopen_lfs},       {"lsqlite3", luaopen_lsqlite3},       {NULL, NULL}  };            void luaopen_lua_extensions(lua_State *L)  {       // load extensions       luaL_Reg* lib = luax_exts;       lua_getglobal(L, "package");       lua_getfield(L, -1, "preload");       for (; lib->func; lib++)       {           lua_pushcfunction(L, lib->func);           lua_setfield(L, -2, lib->name);       }       lua_pop(L, 2);                 // load extensions script       luaopen_socket_scripts(L);       luaopen_pb(L);   //这是加入的protobuf 扩展注册名  }            #if __cplusplus  } // extern "C"  #endif

 

至此 , protobuf 扩展部分就算扩展完成了。  确认是否成功支持 , 可以在quick 项目最先被调用的lua文件中追加 require "pb" 做测试。  *但这时候通过protoc 转码后得到的lua文件还不能被解析。  第四步 从项目中包含protobuf的 lua库 protoc-gen-lua/protobuf/这个目录下面, 还有大量的.lua文件, 是用来支持proto转码后的文件解析调用的。 不能少了这些文件。  复制protoc-gen-lua/protobuf文件夹 到项目中 scripts目录下。  

目录结构应该是这样的:

 

1 [PROJECT]/scripts/protobuf/*.lua

 

然后, 需要告诉框架,从哪里可以引用到它。 

修改main.lua 在require("appxxxxxx") 上面 , 加入下面的代码:

 

1 package.path = package.path .. ";./protobuf/?.lua;./scripts/protobuf/?.lua;"

 

这个方法, 能保证程序在被编译到手机之后仍然可以继续访问这个库。  ***千万别把转码的proto文件放到[PROJECT]/scripts/protobuf 目录里面.不信可以试试。 现在, 项目支持protobuf 文件的解析了。 第五步  重新编译player-x 如果不习惯用player-x调试, 这个步骤不是必须的。 

进入player-x qt源码目录 :

 

1 cd quick-cocos2d-x/player/proj.qt

 

使用qmake 文件执行quick-x.pro 文件 

 

1 qmake ./quick-x.pro

 

继续: make  等待结束, 将得到的quick-x-player文件,  放到:quick-cocos2d-x/player/bin/mac/ 目录下, 这样sublime text 装QuickXDev 扩展的直接可以用。  **如果是mac os 10.9 系统, 可能编译不过去player-x程序。 我遇到了这个问题。  会提示错误  pb.c:28:10: fatal error: 'endian.h' file not found 

如果错误信息相同, 修改文件:

 

1 ./quick-cocos2d-x/lib/cocos2d-x/scripting/lua/lua_extensions/protobuf/pb.c

 

查找行:

 

1 #include <endian.h>

 

临时变更为:

 

1 #include <machine/endian.h>

 

然后重新编译 player-x  make 就足够了  make **player-x 编译完毕后, 千万要将endian.h 引用改回原来的 #include <endian.h> , 否则打包到手机的时候又回提示文件找不到了。

总结

以上是生活随笔为你收集整理的Quick-Cocos2d-x 集成 Google protobuf 方法的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。