主要分为下面几个步骤:
1,开始前的准备工作
首先从github上下载Google的protobuf编译出protoc.exe 地址
然后也是从github上下载云风大侠的pbc
2,将pbc中的相关代码加入到vs(我用的是vs2013)工程项目中
在frameworks\runtime-src\Classes目录下加入protobuf文件夹文件夹中加入pbc相关代码,它们的结构是这样的
1 2 3 4 | protobuf\src protobuf\pbc.h protobuf\pbc-lua.c protobuf\pbc-lua.h |
其中src文件夹即为pbc下的src,pbc.h为pbc下的pbc.h,pbc-lua.c为pbc\binding\lua目录下的puc-lua.c
pbc-lua.h是我们自己创建的头文件,它的内容是:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | #ifndef__LUA_PBC_EXTRA_H_ #define__LUA_PBC_EXTRA_H_ #if__cplusplus extern "C" { #endif #include"lauxlib.h" int luaopen_protobuf_c(lua_State*L); #if__cplusplus } #endif #endif |
然后在vs中新建筛选器protobuf和src将相关代码添加进去,通过 *** 作项目工程属性将protobuf文件夹目录包含进去。
在AppDelegate.cpp头部加入#include "protobuf/pbc-lua.h" 然后在bool AppDelegate::applicationDIDFinishLaunching()
方法中LuaStack* stack = engine->getLuaStack();这一句的上一行加入luaopen_protobuf_c(L);函数调用
重新编译工程。
3,在脚本中加入protobuf.lua(为了项目看上去结构比较好看,在app目录下加入了protobuf目录)
在src\app目录下加入protobuf文件夹,在文件夹中加入pbc中binding\lua\protobuf.lua文件
4,编写protobuf文件并用protoc.exe生成pb文件
我的例子protobuf源文件为:person.proto
packagetest.protocol.sgp; messagePerson{ requiredint32ID=1; requiredstringname=2; optionalstringemail=3; } |
在网上找了个批处理文件,pb.bat然后根据需求将其改了下
@echooff setDIR=%~dp0 cd/d "%DIR%" setlocalenabledelayedexpansion for /r%%iin(*.proto) do ( setpbname=%%i setpbname=!pbname:~0,-5!b protoc-I%DIR%--descriptor_set_out!pbname!%%i ) if exist "./pb" rmdir/s/q "./pb" mkdir "./pb" move*.pb./pb echo "finished" |
将protoc.exe,pb.bat,person.proto 放入同一目录下并执行pb.bat
执行完成后再当前目录下会生成一个pb文件夹,文件夹中即为我们所需要的person.pb文件
5,编写测试代码
将生成的pb文件夹放入项目资源目录res中
我的MyApp.lua
require( "config" ) "cocos.init" ) "framework.init" ) "app.protobuf.protobuf" ) MyGame={} MyGame.protobuf=protobuf localMyApp= class ( "MyApp" ,cc.mvc.AppBase) functionMyApp:ctor() MyApp.super.ctor(self) end functionMyApp.registerallProtobuf() localpbAllname={ "pb/person.pb" } i=1,#pbAllname do localfileData=cc.HelperFunc:getfileData(pbAllname[i]) MyGame.protobuf. register (fileData) end end functionMyApp:run() cc.fileUtils:getInstance():addSearchPath( "res/" ) MyApp.registerallProtobuf() self:enterScene( "MainScene" ) end return MyApp |
我的MainScene.lua
localMainScene= display.newScene( end) functionMainScene:ctor() localdata={} data.ID=12 data.name= "xiaoming" localstrData=MyGame.protobuf.encode( "test.protocol.sgp.Person" localperson=MyGame.protobuf.decode( dump(person) end MainScene |
最后运行项目如果能够dump出person就表示集成成功啦!
总结以上是内存溢出为你收集整理的Quick-Cocos2d-x 3.3下集成云风pbc(Windows版)转全部内容,希望文章能够帮你解决Quick-Cocos2d-x 3.3下集成云风pbc(Windows版)转所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)