cocos2d-x中集成protoc-gen-lua

cocos2d-x中集成protoc-gen-lua,第1张

概述【版本说明】 python:2.7.5 protobuf:2.5.0 lua:5.1.5 protoc-gen-lua:latest cocos2d-x:3.2   【安装步骤】 1. python/lua/cocos2d-x环境默认已安装 安装protobuf 进入protobuf-2.5.0\python,执行: 1 2 3 python setup.py build python setup

【版本说明】

python:2.7.5

protobuf:2.5.0

lua:5.1.5

protoc-gen-lua:latest

cocos2d-x:3.2

【安装步骤】

1. python/lua/cocos2d-x环境默认已安装

安装protobuf

进入protobuf-2.5.0\python,执行:

1 2 3 python setup.py build python setup.py test python setup.py install

2.protoc-gen-lua解压放置到某个目录下,假定为c:\

protoc-gen-lua\plugin下创建protoc-gen-lua.bat,文件内容为:

1 python c:\protoc - gen lua\plugin\protoc lua

3. 通过proto生成lua,命令为:

1 protoc - - lua_out = . / plugin gen lua = "c:\protoc-gen-lua\plugin\protoc-gen-lua.bat" person.proto

【集成步骤】

1. 加入pb.c文件,在frameworks\cocos2d-x\external\lua下创建protobuf目录,copy pb.c文件至此

win32下编译出错,修改pb.c文件如下:

#ifndef _WIN32 //添加 #include <endian.h> #endif //添加

2. protobuf目录下加入pb.h文件:

3 4 5 6 7 8 9 10 11 12 13 14 #ifndef __LUA_PROTOBUF_H_ #define __LUA_PROTOBUF_H_ #include "lua.h" #if __cplusplus extern "C" { #endif int luaopen_pb(lua_State * L); #if __cplusplus } #endif #endif

3.修改lua_extensions.c文件:

14 15 16 17 18 #if __cplusplus { #endif / / socket #include "luasocket/luasocket.h" #include "luasocket/mime.h" #include "lpack/lpack.h" #include "cJson/lua_cJson.h" #include "protobuf/pb.h" //添加 static luaL_Reg luax_exts[] = { { "cJson" ,luaopen_cJson_safe}, "pack" "pb" 添加 "socket.core" "mime.core" };

4.将protoc-gen-lua\protobuf下的lua文件放置到项目的搜索目录中

【重要说明】

protoc-gen-lua这个坑爹的玩意儿不支持嵌套message,如果嵌套的message在同一个proto里面是可以的,但是如果在不同的文件里面,通过import的方式引用就有问题了。

可以通过修改生成lua的python脚本解决这个问题,方法如下:

@H_212_403@1. 首先定义的被引用的proto文件头要加上package,如:

5 package pb; message BaseMsg { ... }

2.在引用的proto文件中修改为这样:

6 import "Base.proto" message PlayerMsg { optional pb.BaseMsg msg = 1 ; ... 3.修改protoc-gen-lua\plugin\protoc-gen-lua文件:

if
fIEld_desc.HasFIEld( 'type_name' ): type_name env.get_ref_name(fIEld_desc.type_name).upper() 这一行 fIEld_desc. type = FDP.TYPE_MESSAGE: 7 def code_gen_message(message_descriptor,env,containing_type = None env.enter(message_descriptor.name) full_name env.get_local_name() obj_name full_name.upper().replace( '.' '_' ) env.descriptor.append( "%s = protobuf.Descriptor();\n" % 这一行去掉local ) is_gen: lua Writer() write_header(lua) lua( 'local protobuf = require "protobuf"\n' for i in includes: 'local %s_PB = require("%s_pb")\n' (i.upper(),i)) 这一行PB大写 "module('%s_pb')\n" env.filename)

然后就可以了。

总结

以上是内存溢出为你收集整理的cocos2d-x中集成protoc-gen-lua全部内容,希望文章能够帮你解决cocos2d-x中集成protoc-gen-lua所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/1081857.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-27
下一篇2022-05-27

发表评论

登录后才能评论

评论列表(0条)

    保存