cocos2dx-3.x 导入lua扩展库
2015-02-09 16:43
260 查看
使用cocos2dx-lua做开发,免不了需要利用额外的lua扩展库。lua 扩展库一般由 c/c++ 写成,其接口有两种方式生成,一种是手写luaL_register(lua5.1),另一种是利用 tolua++ 工具。这里讨论的是前者,即如何把已经写好的库导入到cocos2dx项目中使用。项目采用的是 cocos2dx-3.x 版本,涉及到的目录文件请对号入座。
首先我们要知道,cocos2dx 已经为我们提供不少的扩展库了,在
我们以添加云风的sproto库来做示例。
首先介绍一下sproto库,该库是云风精心构思后对 Google protobuf 协议的一个精简,更适用于游戏开发。详情请参阅文档
但是云风的这个库只支持lua5.2+的版本,而cocos2dx使用的是lua5.1,所以要使用的话,可以试试我的修改版。我所做的修改仅仅在lua层,下层的c核心与原版一致。所做的修改只是用 bitop 库来替换lua5.2内置的bit库(5.1木有)。
首先请下载 sproto。需要的文件为
然后我们还需要下载其利用到的相关库 bitop 和 lpeg。
文件准备就绪后就是导入到 cocos2dx 中。
在
然后就是修改一些文件,来真正的导入了。
在
头部包含所需文件。
在
然后。。。。就没有然后了。。。。
上述工作完成后,是可以在ios和mac下编译运行成功的。但Android还要多做点事情。
在
细心点的可能会说
然后。。。是真的没有然后了。。。
总得来说还是很简单的,只需三步:
文件放到
修改
修改
bitop 下载地址:http://bitop.luajit.org/
lpeg0.9 下载地址:https://github.com/LuaDist/lpeg/releases
准备所需的库
首先我们要知道,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,
lsproto.h,
lsproto.c,
sprotoparser.lua。
然后我们还需要下载其利用到的相关库 bitop 和 lpeg。
文件准备就绪后就是导入到 cocos2dx 中。
导入
在 cocos2d-x/external/lua目录下新建三个文件夹 sproto,bitop,lpeg。然后将各自的文件放入其中,为了符合cocos2dx的规范,需要在bitop中建立一个
bit.h文件,内容如下。其内容只是为了方便导入,没什么具体意义。
[code]#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文件。在
头部包含所需文件。
[code]#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内,加入下列几行。
[code]#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文件
[code] ../../../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扩展库
- 在cocos2dx-lua上导入sproto的相关配置
- Cocos2dx lua 2.xpk 3.x偏Mac OS
- cocos2dx-3.x lua绑定
- cocos2dx 3.x引擎升级,lua绑定genbindings.py运行错误问题
- cocos2dx 3.x getStringFromFile lua 读取二进制文件
- cocos2dx-3.x 导出自定义类到 lua 过程详解
- cocos2dx-lua 3.x 热更新方法
- Lua_Cocos2dx 3.x版本中Lua注册事件函数
- cocos2dx 3.x 中 Lua socket 和 node.js 利用scoket互相通信读写二进制数据
- lua教程九---使用cocos2dx-LuaProxy便捷Lua项目快速使用cocos2dx引擎extensions扩展包
- cocos2dx3.x 导出自定义事件到lua的方法
- Cocos2dx-3.x在lua中ccb动画完成回调setAnimationCompletedCallback修改方法(二)
- 使用cocos2dx-LuaProxy便捷Lua项目快速使用cocos2dx引擎extensions扩展包
- 【COCOS2DX-LUA 脚本开发之九】使用cocos2dx-LuaProxy便捷Lua项目快速使用cocos2dx引擎extensions扩展包
- cocos2dx3.x 导入别人工程到eclipse配置
- cocos2dx_lua 2.x 版本 与 3.x 版本 区别 总结
- cocos2d-x 3.3 导入lua扩展库
- cocos2dx导入和使用lua文件