从论坛和技术支持的反馈来看,很多童鞋在Cocos中进行lua绑定时遇到了不少问题,因为Cocos使用的是预编译库的方式,所以和之前用Cocos2d-x绑定又不太一样。原有的教程也需要做调整,这篇文章目的是在Cocos中创建一个自定义类,并进行lua绑定,然后在lua中调用C++。
关于如何在Cocos2d-x中进行lua绑定自定义类,请看 Binding_Custom_Class_To_Lua_Runtime 。本文是基于此教程做的调整。
1.版本说明
环境: Mac OSX
Cocos: v2.1
Cocos2d-x: v3.4Final
Cocos Code IDE: v1.2.0
Cocos Studio: v2.1.2 beta(这里没用到)
2.在Cocos中进行lua绑定自定义类
2.1 创建项目
首先,创建一个Cocos项目,名字为CocosLuaBinding。
2.2 发布项目
创建后默认会使用Cocos Studio打开,选择发布为XCode工程。
2.3 添加自定义类
在XCode中,项目的Classes目录下添加Custom类。
2.4 添加cocos2dx_custom.ini文件
由于使用的是Cocos Framework,所以创建的cocos2dx_custom.ini路径是 /Applications/Cocos/frameworks/cocos2d-x-3.4/tools/tolua/(默认安装路径)。需要注意的是headers的路径要指向项目/frameworks/runtime-src/Classes/,这里我用了绝对路径,您需要修改为自己的路径。
2.5 修改genbindings.py
genbindings.py脚本是用来运行绑定的脚本。这里的路径是/Applications/Cocos/frameworks/cocos2d-x-3.4/tools/tolua/genbindings.py。
找到cmd_args,加入下面这行:
output_dir参数指定了绑定文件的输出目录,这里可以更改为Classes,也可以不改。这里就不改了。
cmd_args的其他行是引擎的脚本绑定,如果未做修改,可以删除以避免引擎文件的重复绑定,加快绑定速度。这里也不改了。
2.6 运行绑定脚本
打开终端,进入tolua目录,运行刚才修改的genbindings.py脚本。
这里不讨论绑定失败的情况,大部分是环境变量没配好的原因,在运行之前请先阅读/Applications/Cocos/frameworks/cocos2d-x-3.4/tools/tolua/README.mdown。
2.7 拷贝绑定文件到项目目录
在成功运行完绑定脚本后,绑定文件会生成在/Applications/Cocos/frameworks/cocos2d-x-3.4/cocos/scripting/lua-bindings/auto/lua_cocos2dx_custom.cpp(h)
将这俩个文件剪切到Classes目录,并添加到XCode项目中。
到此为止,基本上是和Binding_Custom_Class_To_Lua_Runtime一致的。
3.编译运行
由于使用的是Cocos Framework,所以引擎没有源码了,只有预编译库,这也就是为什么在第二步中我们主要做的调整:把自定义类及其绑定文件放到Classes中。
3.1 注册自定义类
打开Classes/lua_module_register.h文件,添加头文件
在static int lua_module_register(lua_State* L)添加注册函数
3.2 关闭COCOS_IDE_DEBUG_SUPPORT
打开Classes/ide-support/CodeIDESupport.h文件,修改
3.3 在Cocos IDE中构建自定义模拟器
在Cocos IDE中打开项目,选中CocosLuaBinding项目,右键,Cocos工具,构建自定义模拟器,选择相应的模拟器,点击生成。
因为Cocos Framework默认使用自带的模拟器,所以如果修改了C++文件,仍然使用默认模拟器,修改的C++文件不会生效。
构建自定义模拟器后,以后每次都会使用自定义的模拟器。
3.4 如何知道目前使用的是自定义模拟器还是默认模拟器?
选中CocosLuaBinding项目,右键,调试方式,调试配置。
以Mac平台为例:
自定义模拟器路径为/Users/Jacky/Workspace/CocosLuaBinding/runtime/mac/CocosLuaBinding Mac
默认模拟器路径为/Applications/Cocos/cocos-simulator-bin/mac/Simulator.app
4.测试绑定是否成功
在src/app/views/MainScene.lua的function MainScene:onCreate()中添加如下测试代码
5.搞定,收工~
关于如何在Cocos2d-x中进行lua绑定自定义类,请看 Binding_Custom_Class_To_Lua_Runtime 。本文是基于此教程做的调整。
1.版本说明
环境: Mac OSX
Cocos: v2.1
Cocos2d-x: v3.4Final
Cocos Code IDE: v1.2.0
Cocos Studio: v2.1.2 beta(这里没用到)
2.在Cocos中进行lua绑定自定义类
2.1 创建项目
首先,创建一个Cocos项目,名字为CocosLuaBinding。
2.2 发布项目
创建后默认会使用Cocos Studio打开,选择发布为XCode工程。
2.3 添加自定义类
在XCode中,项目的Classes目录下添加Custom类。
复制代码
|
复制代码
|
2.4 添加cocos2dx_custom.ini文件
由于使用的是Cocos Framework,所以创建的cocos2dx_custom.ini路径是 /Applications/Cocos/frameworks/cocos2d-x-3.4/tools/tolua/(默认安装路径)。需要注意的是headers的路径要指向项目/frameworks/runtime-src/Classes/,这里我用了绝对路径,您需要修改为自己的路径。
复制代码
|
2.5 修改genbindings.py
genbindings.py脚本是用来运行绑定的脚本。这里的路径是/Applications/Cocos/frameworks/cocos2d-x-3.4/tools/tolua/genbindings.py。
找到cmd_args,加入下面这行:
复制代码
|
output_dir参数指定了绑定文件的输出目录,这里可以更改为Classes,也可以不改。这里就不改了。
cmd_args的其他行是引擎的脚本绑定,如果未做修改,可以删除以避免引擎文件的重复绑定,加快绑定速度。这里也不改了。
2.6 运行绑定脚本
打开终端,进入tolua目录,运行刚才修改的genbindings.py脚本。
复制代码
|
这里不讨论绑定失败的情况,大部分是环境变量没配好的原因,在运行之前请先阅读/Applications/Cocos/frameworks/cocos2d-x-3.4/tools/tolua/README.mdown。
2.7 拷贝绑定文件到项目目录
在成功运行完绑定脚本后,绑定文件会生成在/Applications/Cocos/frameworks/cocos2d-x-3.4/cocos/scripting/lua-bindings/auto/lua_cocos2dx_custom.cpp(h)
将这俩个文件剪切到Classes目录,并添加到XCode项目中。
到此为止,基本上是和Binding_Custom_Class_To_Lua_Runtime一致的。
3.编译运行
由于使用的是Cocos Framework,所以引擎没有源码了,只有预编译库,这也就是为什么在第二步中我们主要做的调整:把自定义类及其绑定文件放到Classes中。
3.1 注册自定义类
打开Classes/lua_module_register.h文件,添加头文件
复制代码
|
在static int lua_module_register(lua_State* L)添加注册函数
复制代码
|
3.2 关闭COCOS_IDE_DEBUG_SUPPORT
打开Classes/ide-support/CodeIDESupport.h文件,修改
复制代码
|
3.3 在Cocos IDE中构建自定义模拟器
在Cocos IDE中打开项目,选中CocosLuaBinding项目,右键,Cocos工具,构建自定义模拟器,选择相应的模拟器,点击生成。
因为Cocos Framework默认使用自带的模拟器,所以如果修改了C++文件,仍然使用默认模拟器,修改的C++文件不会生效。
构建自定义模拟器后,以后每次都会使用自定义的模拟器。
3.4 如何知道目前使用的是自定义模拟器还是默认模拟器?
选中CocosLuaBinding项目,右键,调试方式,调试配置。
以Mac平台为例:
自定义模拟器路径为/Users/Jacky/Workspace/CocosLuaBinding/runtime/mac/CocosLuaBinding Mac
默认模拟器路径为/Applications/Cocos/cocos-simulator-bin/mac/Simulator.app
4.测试绑定是否成功
在src/app/views/MainScene.lua的function MainScene:onCreate()中添加如下测试代码
复制代码
|
5.搞定,收工~