@H_404_2@ 事实上引擎为了方便我们应对不同平台,已经帮我们创建了不同平台的工程项目。为了编辑代码方便,我使用VS2013打开了"runtime-src"文件夹下的"proj.win32"工程。@H_404_2@前往项目录径“F:\Cocos2dx-Lua\Garfield\frameworks\runtime-src\Classes”,我将在这里创建一个自定义类"Pet",代码如下。
@H_404_2@tolua_root = '%s/tools/tolua' % project_root
@H_404_2@
@H_404_2@// 指定绑定脚本执行后,产生的绑定一系列文件输出保存于何路径
@H_404_2@// 虽然无需修改,但是我们要记住,我们产生的绑定文件是输出于
@H_404_2@// "F:\Cocos2dx-Lua\Garfield\frameworks\cocos2d-x\cocos\scripting\lua-bindings\auto"
@H_404_2@output_dir = '%s/cocos/scripting/lua-bindings/auto' % project_root
@H_404_2@
@H_404_2@// 这个数组中指定了要执行绑定脚本的一些配制参数 ,看到第一行,'cocos2dx.ini' 是一个配制文件,我们可以在"@H_404_2@genbindings.py"同级目录中找到它。‘cocos2d-x’实际上是在'cocos2dx.ini' 配制文件中的第一行所指定的一个字符常量,主要是用于生成绑定桥接文件时,为诸如条件编译 ifndef 及 生成的注册自定义类接口取名所用。一会我将会在后面稍提这点,这里如果不明白,请暂时忽略它。‘lua_cocos2dx_auto’是给生成的绑定桥接文件指定的言语件名。
@H_404_2@cmd_args = {'cocos2dx.ini' : ('cocos2d-x','lua_cocos2dx_auto'),\
@H_404_2@ ... ...
@H_404_2@}
@H_404_2@
@H_404_2@
@H_404_2@
了解"@H_404_2@genbindings.py"之后,@H_404_2@在它的同级目录你可以找到”cocos2dx.ini“,这是与之息息相关的配制文件。打开它,我们稍做了解。
@H_404_2@
@H_404_2@ 请关注于 第 1、4、8、25 、29行。
@H_404_2@ 还记得上面我们提到的数组吗?
@H_404_2@ cmd_args = {'cocos2dx.ini' : ('cocos2d-x',\
@H_404_2@ ... ...
@H_404_2@ }
@H_404_2@ 第 4 行是一些@H_404_2@条件编译 ifndef 及 生成的注册自定义类接口取名所用的前缀,前面我们已经提到过。
@H_404_2@@H_404_2@@H_404_2@ 第8 行是指定该绑定类的命名空间
@H_404_2@@H_404_2@@H_404_2@@H_404_2@ 第25@H_404_2@行指定需要绑定的自定义类头文件路径
@H_404_2@@H_404_2@@H_404_2@@H_404_2@ 第29行 指定绑定的C++自定义类导出后的Lua类文件名
@H_404_2@@H_404_2@@H_404_2@@H_404_2@
@H_404_2@ 了解这些之后,我们将对这两个文件进行一些修改,用于完成我们的类至Lua的绑定。
@H_404_2@ 首先我们拷贝一份'cocos2dx.ini',@H_404_2@将其命名为 'custom_pet.ini'@H_404_2@。拷贝一份'genbindings.py',@H_404_2@将其命名为'custom_pet_genbindings.py'@H_404_2@。
@H_404_2@@H_404_2@@H_404_2@ 改动'custom_pet.ini'第 1、4、8、25 、29行。如下:
@H_404_2@@H_404_2@@H_404_2@@H_404_2@ 因为我们没有指定名字空间,所以第 8 行@H_404_2@'target_namespace'将其赋空。
@H_404_2@@H_404_2@@H_404_2@@H_404_2@@H_404_2@ 而'headers'当中只是相对路径的给定。还记得"Pet"类我们是创建于哪里吗?
@H_404_2@@H_404_2@@H_404_2@@H_404_2@@H_404_2@ 正是在@H_404_2@F:\Cocos2dx-Lua\Garfield\frameworks\runtime-src\Classes”。
@H_404_2@@H_404_2@@H_404_2@@H_404_2@@H_404_2@@H_404_2@
@H_404_2@@H_404_2@@H_404_2@@H_404_2@@H_404_2@
@H_404_2@@H_404_2@@H_404_2@@H_404_2@@H_404_2@ OK!接下来我们改动custom_pet_genbindings.py'@H_404_2@。关注于第 133 至 138 行,我们将在这里做一些修改。如下:
@H_404_2@@H_404_2@@H_404_2@@H_404_2@@H_404_2@@H_404_2@ 在cmd_args@H_404_2@参数表中,我们指定该Python绑定脚本的配制文件为我们修改好的'@H_404_2@。一些可能会用到的命名前缀为'custom_pet'@H_404_2@。指定导出的桥接文件名为'lua_pet_auto'@H_404_2@。
@H_404_2@@H_404_2@@H_404_2@@H_404_2@@H_404_2@@H_404_2@@H_404_2@@H_404_2@
@H_404_2@@H_404_2@@H_404_2@@H_404_2@@H_404_2@@H_404_2@
@H_404_2@@H_404_2@@H_404_2@@H_404_2@@H_404_2@@H_404_2@
@H_404_2@@H_404_2@@H_404_2@@H_404_2@@H_404_2@@H_404_2@ 最后,我们执行'custom_pet_genbindings.py'。
"Generating lua bindings succeeds"!
见到它,你该欢呼了:)。你已经完成了C++自定义类至Lua的绑定。
在下一小节中,我们来探索下,怎么样在你的项目中使用Lua调用Pet类。
@H_404_2@@H_404_2@@H_404_2@@H_404_2@@H_404_2@