热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

cocos2dxandroidprotobuf,Quickcocos2dx集成googleprotobuf方法

本文将向您介绍quick-cocos2d-x集成googleprotobuf的方法。第一步需要最新的protobuf类库和解析程序。然后,可以得到重要的两个目录pro

fa29e7cbddcc5acc5b764743ce475098.png

本文将向您介绍quick-cocos2d-x集成google protobuf的方法。

第一步   需要最新的protobuf 类库和解析程序。

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

protoc-gen-lua/plugin/

protoc-gen-lua/protobuf/

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

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

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

关于protoc的编译另请google .

如果解析不出lua文件来, 可以手动志信一下plugin/protoc-gen-lua的程序, 他应该是+x 的权限(chmod +x plugin/protoc-gen-lua)

第三步 , 将protobuf 集成到quick 中

protoc-gen-lua/protobuf/ 目录就是要编译到quick-cocos2d-x目录里面的部分。

现在, 我们只需要 protoc-gen-lua/protobuf/pb.c 这个文件

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

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

所有lua 的c/c++现成扩展,都可以直接放到这里。

将pb.c这个文件复制到 lua_extension目录下, 最好独立一个目录, 免得扩展多了乱。

这是我的目录结构:

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

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

路径为:

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

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

#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 库文件

staticluaL_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目录下。

目录结构应该是这样的:

[PROJECT]/scripts/protobuf/*.lua

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

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

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

这个方法, 能保证程序在被编译到手机之后仍然可以继续访问这个库。

***千万别把转码的proto文件放到[PROJECT]/scripts/protobuf 目录里面.不信可以试试。

现在, 项目支持protobuf 文件的解析了。

第五步  重新编译player-x

如果不习惯用player-x调试, 这个步骤不是必须的。

进入player-x qt源码目录 :

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

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

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

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

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

查找行:

#include 

临时变更为:

#include 

然后重新编译 player-x

make 就足够了

make

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



推荐阅读
  • 本文整理了一份基础的嵌入式Linux工程师笔试题,涵盖填空题、编程题和简答题,旨在帮助考生更好地准备考试。 ... [详细]
  • 2020年9月15日,Oracle正式发布了最新的JDK 15版本。本次更新带来了许多新特性,包括隐藏类、EdDSA签名算法、模式匹配、记录类、封闭类和文本块等。 ... [详细]
  • 短视频app源码,Android开发底部滑出菜单首先依赖三方库implementationandroidx.appcompat:appcompat:1.2.0im ... [详细]
  • vue引入echarts地图的四种方式
    一、vue中引入echart1、安装echarts:npminstallecharts--save2、在main.js文件中引入echarts实例:  Vue.prototype.$echartsecharts3、在需要用到echart图形的vue文件中引入:   importechartsfrom"echarts";4、如果用到map(地图),还 ... [详细]
  • PHP-Casbin v3.20.0 已经发布,这是一个使用 PHP 语言开发的轻量级开源访问控制框架,支持多种访问控制模型,包括 ACL、RBAC 和 ABAC。新版本在性能上有了显著的提升。 ... [详细]
  • 本文介绍了 Python 中的基本数据类型,包括不可变数据类型(数字、字符串、元组)和可变数据类型(列表、字典、集合),并详细解释了每种数据类型的使用方法和常见操作。 ... [详细]
  • 本文详细介绍了 Java 网站开发的相关资源和步骤,包括常用网站、开发环境和框架选择。 ... [详细]
  • 普通树(每个节点可以有任意数量的子节点)级序遍历 ... [详细]
  • Leetcode学习成长记:天池leetcode基础训练营Task01数组
    前言这是本人第一次参加由Datawhale举办的组队学习活动,这个活动每月一次,之前也一直关注,但未亲身参与过,这次看到活动 ... [详细]
  • 在 Mac 上配置 NDK
    本文详细介绍了如何在 Mac 上配置 Android NDK,包括设置环境变量和解决常见问题的方法。 ... [详细]
  • 本文节选自《NLTK基础教程——用NLTK和Python库构建机器学习应用》一书的第1章第1.2节,作者Nitin Hardeniya。本文将带领读者快速了解Python的基础知识,为后续的机器学习应用打下坚实的基础。 ... [详细]
  • 本文详细介绍了 Charles 工具的下载、安装、配置及使用方法,特别针对 HTTP 和 HTTPS 协议的数据抓取进行了说明。 ... [详细]
  • 兆芯X86 CPU架构的演进与现状(国产CPU系列)
    本文详细介绍了兆芯X86 CPU架构的发展历程,从公司成立背景到关键技术授权,再到具体芯片架构的演进,全面解析了兆芯在国产CPU领域的贡献与挑战。 ... [详细]
  • 本文介绍了如何使用 Google Colab 的免费 GPU 资源进行深度学习应用开发。Google Colab 是一个无需配置即可使用的云端 Jupyter 笔记本环境,支持多种深度学习框架,并且提供免费的 GPU 计算资源。 ... [详细]
  • 目录预备知识导包构建数据集神经网络结构训练测试精度可视化计算模型精度损失可视化输出网络结构信息训练神经网络定义参数载入数据载入神经网络结构、损失及优化训练及测试损失、精度可视化qu ... [详细]
author-avatar
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有