在Cocos商店里下载cocos2d-x框架,NDK,SDK
我的安装如下
云风pbc https://github.com/cloudwu/pbc
下载下来为pbc-master 改成pbc,内容如下pbc-lua.h是后来加的,
如图,新建一个pbc-lua.h,内容如下
- #ifndef__LUA_PBC_EXTRA_H_
- #define__LUA_PBC_EXTRA_H_
-
- #ifdefined(_USRDLL)
- #defineLUA_EXTENSIONS_DLL__declspec(dllexport)
- #else/*useaDLLlibrary*/
- #defineLUA_EXTENSIONS_DLL
- #endif
- #if__cplusplus
- extern"C"{
- #include"lauxlib.h"
- intLUA_EXTENSIONS_DLLluaopen_protobuf_c(lua_State*L);
- }
- #endif
在pbc目录bindingluapbc-lub.c的#include"pbc.h"下添加#include"pbc-lua.h"
用vs2012打开Cocos1frameworksruntime-srcproj.win32Cocos1.sln
Cocos1是我项目名称,换成你项目名称
将pbc这个目录放到Class目录下
右键解决方案Cocos1->添加->现有项目,选择pbc目录pbc.vxcproj
1.右键pbc项目->添加->现有项,选择pbc目录下的pbc-lua.h和
pbc目录bindingluapbc-lua.c
右键pbc项目->属性->配置属性->C/C++->常规->附加包含目录:$(COCOS_FRAMEWORKS)cocos2d-x-3.5externallualuajitinclude
右键pbc项目->属性->配置属性->C/C++->常规-->输出目录 中$(SolutionDir)$(Configuration).win32
右键pbc项目->生成
右键Cocos1项目->属性->通用属性->框架和引用->添加新引用,选择pbc,点确定
右键Cocos1项目->属性->配置属性->C/C++->附加包含目录,添加包含$(ProjectDir)..Classespbc并确定
1.右键Cocos1项目->属性->配置属性->链接器->输入->附加依赖项,添加pbc.lib并确定
在AppDelegate.cpp中添加#include"pbc-lua.h" 并添加以下代码
copy
staticintbsReadFile(lua_State*L)
- {
- constchar*buff=luaL_checkstring(L,-1);
- Datadata=CCFileUtils::getInstance()->getDataFromFile(buff);
- lua_pushlstring(L,(char*)data.getBytes(),data.getSize());
- return1;
-
-
-
- intregister_all_packages()
- {
- lua_State*L=LuaEngine::getInstance()->getLuaStack()->getLuaState();
- luaopen_protobuf_c(L);
- lua_register(L,"bsReadFile",bsReadFile);
- return0;
- }
运行编译Cocos1项目,这样就将protubuf加入win32的模拟器中了
下面是cocos code ide 方面
先把3.5框架设置好,如下
上图中,SDK,NDK设置成你用Cocos中商店下载的,JDK,ANT,PYTHON随便你了
将pbc目录bindingluaprotobuf.lua拷贝到res目录下
解压缩protoc-2.5.0-win32.zip 下载地址 http://pan.baidu.com/s/1c04ezcO,将addressbook.pb拷贝到新建的工程的res目录下,图就不上了,看上图,就在protobuf.lua下面,
protoc-2.5.0-win32.zip里面有个工具,可以将.proto文件变成.pb文件,这样才能再lua中用,.proto文件不能再lua中用,在C++中,.proto文件要转换成.h,.cc文件,
打开srcappviewsMainScene.lua 文件,修改如下
localMainScene=class("MainScene",cc.load("mvc").ViewBase)
- --MainScene.RESOURCE_FILENAME="MainScene.csb"
- functionMainScene:onCreate()
- --printf("resourcenode=%s",tostring(self:getResourceNode()))
- localroot=cc.CSLoader:createNode("MainScene.csb")
- root:addTo(self)
- localpbFilePath=cc.FileUtils:getInstance():fullPathForFilename("res/addressbook.pb")
- release_print("PBfilepath:"..pbFilePath)
- localpb=require"protobuf"
- localbuffer=bsReadFile(pbFilePath)
- pb.register(buffer)
- localstringbuffer=pb.encode("tutorial.Person",
- name="Alice",248)"> id=12345,
- phone={
- number="87654321"
- },248)"> })
- localslen=string.len(stringbuffer)
- localtemp=""
- fori=1,slendo
- temp=temp..string.format("0x%02X,",string.byte(stringbuffer,i))
- end
- release_print(temp)
- localresult=pb.decode("tutorial.Person",stringbuffer)
- release_print("resultname:"..result.name)
- returnMainScene
使用release_print是因为,重新构建win32模拟器时,有时候print之类的输出会失效,这个是cocos2d-x 3.5 BUG,解决方法就是先用这个
encode 表示序列化 decode 表示反序列化
运行输出如下
OK,成功了
下面集成到android中
打开Android.mk文件
修改内容如下
LOCAL_PATH:=$(callmy-dir)
- include$(CLEAR_VARS)
- LOCAL_MODULE:=cocos2dlua_shared
- LOCAL_MODULE_FILENAME:=libcocos2dlua
- FILE_LIST:=hellolua/main.cpp
- FILE_LIST+=$(wildcard$(LOCAL_PATH)/../../Classes/*.cpp)
- FILE_LIST+=$(wildcard$(LOCAL_PATH)/../../Classes/ide-support/*.cpp)
- FILE_LIST+=$(wildcard$(LOCAL_PATH)/../../Classes/ide-support/*.c)
- #添加
- FILE_LIST+=$(wildcard$(LOCAL_PATH)/../../Classes/pbc/binding/lua/*.c)
- FILE_LIST+=$(wildcard$(LOCAL_PATH)/../../Classes/pbc/src/*.c)
- LOCAL_SRC_FILES:=$(FILE_LIST:$(LOCAL_PATH)/%=%)
- LOCAL_C_INCLUDES:=$(LOCAL_PATH)/../../Classes
- LOCAL_C_INCLUDES+=$(LOCAL_PATH)/../../Classes/pbc
- LOCAL_C_INCLUDES+=$(LOCAL_PATH)/../../Classes/pbc/src
- LOCAL_STATIC_LIBRARIES:=cocos2d_lua_static
- LOCAL_STATIC_LIBRARIES+=cocos2d_simulator_static
- include$(BUILD_SHARED_LIBRARY)
- $(callimport-module,scripting/lua-bindings/proj.android/prebuilt-mk)
- $(callimport-module,tools/simulator/libsimulator/proj.android/prebuilt-mk)
这样就可以正确将protobuf源码集成到.so文件中 (编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|