cocos2dx-3.x 导入lua扩展库

cocos2dx-3.x 导入lua扩展库,第1张

概述使用cocos2dx-lua做开发,免不了需要利用额外的lua扩展库。lua 扩展库一般由 c/c++ 写成,其接口有两种方式生成,一种是手写luaL_register(lua5.1),另一种是利用 tolua++ 工具。这里讨论的是前者,即如何把已经写好的库导入到cocos2dx项目中使用。项目采用的是 cocos2dx-3.x 版本,涉及到的目录文件请对号入座。 准备所需的库 首先我们要知道,

使用cocos2dx-lua做开发,免不了需要利用额外的lua扩展库。lua 扩展库一般由 c/c++ 写成,其接口有两种方式生成,一种是手写luaL_register(lua5.1),另一种是利用 tolua++ 工具。这里讨论的是前者,即如何把已经写好的库导入到cocos2dx项目中使用。项目采用的是 cocos2dx-3.x 版本,涉及到的目录文件请对号入座。


准备所需的库

首先我们要知道,cocos2dx 已经为我们提供不少的扩展库了,在cocos2d-x/external/lua目录下,我们可以看到已经有诸如cJson,luasocket,filesysytem(lfs)等常用库。如果我们要添加其他的库,也是添加在这里的。

我们以添加云风的sproto库来做示例。

首先介绍一下sproto库,该库是云风精心构思后对 Google protobuf 协议的一个精简,更适用于游戏开发。详情请参阅文档

但是云风的这个库只支持lua5.2+的版本,而cocos2dx使用的是lua5.1,所以要使用的话,可以试试我的修改版。我所做的修改仅仅在lua层,下层的c核心与原版一致。所做的修改只是用bitop库来替换lua5.2内置的bit库(5.1木有)。

首先请下载sproto。需要的文件为sproto.h,sproto.c,208)">lsproto.h,208)">lsproto.c,208)">sprotoparser.lua。

然后我们还需要下载其利用到的相关库bitoplpeg

文件准备就绪后就是导入到 cocos2dx 中。


导入
cocos2d-x/external/lua目录下新建三个文件夹sproto,bitop,lpeg。然后将各自的文件放入其中,为了符合cocos2dx的规范,需要在bitop中建立一个bit.h文件,内容如下。其内容只是为了方便导入,没什么具体意义。

#ifndef __LUA_BItop_H_#define __LUA_BItop_H_#include "lauxlib.h"LUAliB_API int luaopen_bit(lua_State *L);#endif

然后就是修改一些文件,来真正的导入了。

cocos2d-x/cocos/scripting/lua-bindings/manual目录下,找到lua_extensions.c文件。在 头部包含所需文件。

#include "lpeg/lptypes.h"#include "lpeg/lpcap.h"#include "lpeg/lpcode.h"#include "lpeg/lpprint.h"#include "lpeg/lptree.h"#include "lpeg/lpvm.h"#include "sproto/lsproto.h"#if (CC_TARGET_PLATFORM != CC_PLATFORM_ANDROID)#include "bitop/bit.h"#endif

luax_exts内,加入下列几行。

#if (CC_TARGET_PLATFORM != CC_PLATFORM_ANDROID)    {"bit",luaopen_bit},#endif    {"lpeg",luaopen_lpeg},{"sproto.core",luaopen_sproto_core},

然后。。。。就没有然后了。。。。


AndroID支持
上述工作完成后,是可以在ios和mac下编译运行成功的。但AndroID还要多做点事情。

cocos2d-x/cocos/scripting/lua-bindings/目录下,打开AndroID.mk文件,在那一长串加载c文件后面,加入我们需要的c文件

../../../external/lua/lpeg/lpcap.c \      ../../../external/lua/lpeg/lpcode.c \      ../../../external/lua/lpeg/lpprint.c \      ../../../external/lua/lpeg/lptree.c \      ../../../external/lua/lpeg/lpvm.c \      ../../../external/lua/sproto/lsproto.c \      ../../../external/lua/sproto/sproto.c \

细心点的可能会说bit.c没加。原因很简单,AndroID支持luajit库,里面已经包含了bit库,所以就不用我们来加了,不然编译的时候会出现多重定义的错误。所以在lua_extensions.c文件里,我们也加上了条件编译#if (CC_TARGET_PLATFORM != CC_PLATFORM_ANDROID) ... #endif

然后。。。是真的没有然后了。。。


总结
总得来说还是很简单的,只需三步:

文件放到cocos2d-x/external/lua目录下 修改lua_extensions.c,包含相关文件 修改AndroID.mk做AndroID支持
bitop 下载地址:http://bitop.luajit.org/
lpeg0.9 下载地址:https://github.com/Luadist/lpeg/releases 总结

以上是内存溢出为你收集整理的cocos2dx-3.x 导入lua扩展库全部内容,希望文章能够帮你解决cocos2dx-3.x 导入lua扩展库所遇到的程序开发问题。

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

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存