Lua脚本的导出
准备[编辑]
- 确定你已经安装了 'android-ndk-r9b' 注意:jdk一定为9d
- 下载 python2.7.3 (http://www.python.org/ftp/python/2.7.3/python-2.7.3.msi)
- 将python的安装目录(C:\Python27)添加到 window是的环境变量 'PATH' 中。
- 下载 pyyaml 工具( http://pyyaml.org/download/pyyaml/PyYAML-3.10.win32-py2.7.exe)
,并安装它 - 下载 pyCheetah工具压缩包(https://raw.github.com/dumganhar/my_old_cocos2d-x_backup/download/downloads/Cheetah.zip)
,并解压到 (C:\Python27\Lib\site-packages) - 设置环境变量 ('NDK_ROOT')
- 注:上述工具 可以在外网ftp地址:\\10.224.4.182\kaifa$\zy\toLua 去取。
思路[编辑]
- 在项目工程中创建 需要Lua脚本导出的 c++类。
- 编写该类的导出配置文件。
- 在导出工具中添加配置文件,并生成中间文件。
- 将中间文件(c++类文件)导入项目工程。
- 在项目工程入口文件中,调用中间文件的注入接口。
例子[编辑]
咱写个最简单HelloWorld的例子。
- 在IDE中新建一个CocosLua工程,取名叫 HelloToLua.
- 打开win32工程(HelloToLua\frameworks\runtime-src\proj.win32\HelloToLua.sln)
- HelloToLua
- libbox2d
- libcocos2d
- libluacocos2d
- libSpine
- 在HelloToLua游戏工程中,新建HelloWorld类(HelloToLua\frameworks\runtime-src\Classes),头文件和源文件如下:
- 改写导出配置文件,复制一份cocos2dx_spine.ini,命名为helloworld.ini(HelloToLua\frameworks\cocos2d-x\tools\tolua),改动如下:
- [cocos2dx_spine] => [helloworld]
- prefix = cocos2dx_spine => prefix = helloworld
- headers = %(cocosdir)s/cocos/editor-support/spine/spine-cocos2dx.h => headers = %(cocosdir)s/../runtime-src/Classes/HelloWorld.h
- classes = cocos2dx_spine => classes = helloworld
- skip = ... => skip =
- base_classes_to_skip = => base_classes_to_skip = Ref ProcessBase
- abstract_classes = ... => abstract_classes =
- 改写自己的导出工具,复制一份genbindings.py,命名为genbindings_helloworld.py(HelloToLua\frameworks\cocos2d-x\tools\tolua),改动如下:
- output_dir = '%s/cocos/scripting/lua-bindings/auto' % project_root => output_dir = '%s/../runtime-src/Classes/lua-bindings/auto' % project_root
- cmd_args = {...)} => cmd_args = {'helloworld.ini' : ('helloworld', 'lua_helloworld_auto')}
- 生成中间文件,使用 cmd 命令行,先进入导出工具所在目录,然后 键入 python genbindings_helloworld.py命令,然后回车,就会生成相应的中间文件
lua_helloworld_auto.cpp/hpp(HelloToLua\frameworks\runtime-src\Classes\lua-bindings\auto) - 将中间文件导入HelloToLua工程
- 程序入口注册c++方法,在lua_module_register.h中的lua_module_register方法中,添加一行‘register_all_helloworld(L);’来注册c++方法,
包含头文件为(#include "../runtime-src/Classes/lua-bindings/auto/lua_helloworld_auto.hpp"),效果如下: - 重新编译
- 调用c++注册好的lua方法。在main.lua中的 main()方法 添加一行 HelloWorld:PrintHelloWorld,效果如下:
- 运行 输出:== Hello World !!! ==