Cocos 2.2.1 + cocos2d-x 3.5 集成protobuf

Cocos 2.2.1 + cocos2d-x 3.5 集成protobuf,第1张

概述在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_#if de

在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_#if defined(_USRDLL)    #define LUA_EXTENSIONS_DLL     __declspec(dllexport)#else         /* use a DLL library */    #define LUA_EXTENSIONS_DLL#endif#if __cplusplusextern "C" {#endif#include "lauxlib.h"int LUA_EXTENSIONS_DLL luaopen_protobuf_c(lua_State *L);    #if __cplusplus}#endif#endif


pbc目录\binding\lua\pbc-lub.c#include"pbc.h"下添加#include"pbc-lua.h"




vs2012打开Cocos1\frameworks\runtime-src\proj.win32\Cocos1.sln

Cocos1是我项目名称,换成你项目名称


将pbc这个目录放到Class目录下



右键解决方案Cocos1->添加->现有项目,选择pbc目录\pbc.vxcproj


1.右键pbc项目->添加->现有项,选择pbc目录下的pbc-lua.h

pbc目录\binding\lua\pbc-lua.c




右键pbc项目->属性->配置属性->C/C++->常规->附加包含目录:$(COCOS_FRAMEWORKS)\cocos2d-x-3.5\external\lua\luajit\include




右键pbc项目->属性->配置属性->C/C++->常规-->输出目录 中$(SolutionDir)$(Configuration).win32\



右键pbc项目->生成



右键Cocos1项目->属性->通用属性->框架和引用->添加新引用,选择pbc,点确定




右键Cocos1项目->属性->配置属性->C/C++->附加包含目录,添加包含$(ProjectDir)..\Classes\pbc并确定




1.右键Cocos1项目->属性->配置属性->链接器->输入->附加依赖项,添加pbc.lib并确定




AppDelegate.cpp中添加#include"pbc-lua.h" 并添加以下代码

static int bsReadfile(lua_State *L){	const char *buff = luaL_checkstring(L,-1);	Data data = CCfileUtils::getInstance()->getDataFromfile(buff);	lua_pushlstring(L,(const char*)data.getBytes(),data.getSize());	return 1; /* number of results */}// If you want to use packages manager to install more packages,// don't modify or remove this functionstatic int register_all_packages(){	lua_State *L = LuaEngine::getInstance()->getLuaStack()->getLuaState();	luaopen_protobuf_c(L);	lua_register(L,"bsReadfile",bsReadfile);    return 0; //flag for packages manager}

运行编译Cocos1项目,这样就将protubuf加入win32的模拟器中了


下面是cocos code IDe 方面

先把3.5框架设置好,如下





上图中,SDK,NDK设置成你用Cocos中商店下载的,JDK,ANT,PYTHON随便你了


pbc目录\binding\lua\protobuf.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文件,


打开src\app\vIEws\MainScene.lua 文件,修改如下

local MainScene = class("MainScene",cc.load("mvc").VIEwBase)--MainScene.RESOURCE_filename = "MainScene.csb"function MainScene:onCreate()    --printf("resource node = %s",tostring(self:getResourceNode()))    local root = cc.csloader:createNode("MainScene.csb")    root:addTo(self)    local pbfilePath = cc.fileUtils:getInstance():fullPathForfilename("res/addressbook.pb")    release_print("PB file path: "..pbfilePath)    local pb = require "protobuf"    local buffer = bsReadfile(pbfilePath)    pb.register(buffer)    local stringbuffer = pb.encode("tutorial.Person",{            name = "Alice",ID = 12345,phone = {                {                    number = "87654321"                },}        })    local slen = string.len(stringbuffer)    local temp = ""    for i=1,slen do        temp = temp .. string.format("0x%02X,",string.byte(stringbuffer,i))    end    release_print(temp)    local result = pb.decode("tutorial.Person",stringbuffer)    release_print("result name: "..result.name)endreturn MainScene

使用release_print是因为,重新构建win32模拟器时,有时候print之类的输出会失效,这个是cocos2d-x 3.5 BUG,解决方法就是先用这个

encode 表示序列化 decode 表示反序列化

运行输出如下



OK,成功了


下面集成到androID中


打开AndroID.mk文件



修改内容如下

LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODulE := cocos2dlua_sharedLOCAL_MODulE_filename := libcocos2dluafile_List := hellolua/main.cppfile_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/pbcLOCAL_C_INCLUDES += $(LOCAL_PATH)/../../Classes/pbc/srcLOCAL_STATIC_liBRARIES := cocos2d_lua_staticLOCAL_STATIC_liBRARIES += cocos2d_simulator_staticinclude $(BUILD_SHARED_liBRARY)$(call import-module,scripting/lua-bindings/proj.androID/prebuilt-mk)$(call import-module,tools/simulator/libsimulator/proj.androID/prebuilt-mk)


这样就可以正确将protobuf源码集成到.so文件中

总结

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

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

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

原文地址: http://outofmemory.cn/web/1054170.html

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

发表评论

登录后才能评论

评论列表(0条)

保存