码迷,mamicode.com
首页 > 编程语言 > 详细

MAC版Lua使用自定义C++文件

时间:2015-02-04 20:16:29      阅读:327      评论:0      收藏:0      [点我收藏+]

标签:

网上也由很多类似的Blog来介绍如何在Lua中使用自定义C++文件,但在具体操作时会遇到各种蛋疼的问题,在此把具体步骤以及要注意的地方一一记录,方便他人也方便自己。

最开始我也说明的是我所使用的是MAC机。

首先Quick-Cocos2d-x3.3Final中自带了绑定C++的文档frameworks/cocos2d-x/tools/tolua/README.mdown,里面有介绍关于如何绑定C++文件。

1、如果OS上没有装python,到http://brew.sh/,插入HomeBrew,也可以直接copy以下代码到终端执行:

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

  执行完之后,安装文档说明执行安装Python

brew install python

2、通过pip,安装Python的依赖。

首先插入pip

sudo easy_install pip

  如果是第一次需要提供账户密码。

插入pyyaml包,注意不要用sudo

pip install PyYAML

  如果后面的操作提示 no find yaml,执行:

pip uninstall PyYAML

  删除pyyaml,并重新执行插入pyyaml。

然后插入Cheetah:

sudo pip install Cheetah

3、尽管之前已经设置了NDK_ROOT路径,为了之后不必要的报错,这里还是要设置一下;同时也要重新设置PYTHON_BIN的路径。

如果采用默认的插入Python的方法,PYTHON_BIN=/usr/local/bin/python2.7,但也可能会不一样,还需要检查。

4、创建.ini文件,copy一份Cocos2d-x.ini,并重新命名为lua_custom_api.ini,修改其中内容:

[lua_custom_api]
prefix = lua_custom_api
target_namespace = 
headers = %(cocosdir)s/my/MyClass.h
classes = MyClass.*
skip = 
rename_functions = 
rename_classes = 
remove_prefix = 
classes_have_no_parents = 
base_classes_to_skip = 
abstract_classes = 
假如我们创建了一个MyClass.h和MyClass.cpp,并放在了frameworks/cocos2d-x目录下的my下
target_namespaced是C++文件使用的命名空间,类似cc一样的东西。
具体参数的意义可以查看cocos2d-x.ini文件中得解释说明。
5、重新创建一个genbindings.py
由于我们只是新增加了C++文件,并没有改变Cocos2d-x代码,所以没必要再次绑定Cocos2d-x代码。进入目录frameworks/cocos2d-x/tools/tolua/,copy一份genbindings.py,并把命名为custom_genbindings.py
把其中的内容:
 1         cmd_args = {cocos2dx.ini : (cocos2d-x, lua_cocos2dx_auto),  2                     cocos2dx_assetsmanager.ini : (cocos2dx_assetsmanager, lua_cocos2dx_assetsmanager_auto),  3                     cocos2dx_extension.ini : (cocos2dx_extension, lua_cocos2dx_extension_auto),  4                     cocos2dx_ui.ini : (cocos2dx_ui, lua_cocos2dx_ui_auto),  5                     cocos2dx_studio.ini : (cocos2dx_studio, lua_cocos2dx_studio_auto),  6                     cocos2dx_spine.ini : (cocos2dx_spine, lua_cocos2dx_spine_auto),  7                     cocos2dx_physics.ini : (cocos2dx_physics, lua_cocos2dx_physics_auto),  8                     cocos2dx_experimental_video.ini : (cocos2dx_experimental_video, lua_cocos2dx_experimental_video_auto),  9                     cocos2dx_experimental.ini : (cocos2dx_experimental, lua_cocos2dx_experimental_auto), 10                     cocos2dx_controller.ini : (cocos2dx_controller, lua_cocos2dx_controller_auto), 11                     cocos2dx_cocosbuilder.ini: (cocos2dx_cocosbuilder, lua_cocos2dx_cocosbuilder_auto), 12                     cocos2dx_cocosdenshion.ini: (cocos2dx_cocosdenshion, lua_cocos2dx_cocosdenshion_auto), 13                     cocos2dx_3d.ini: (cocos2dx_3d, lua_cocos2dx_3d_auto), 14                     cocos2dx_audioengine.ini: (cocos2dx_audioengine, lua_cocos2dx_audioengine_auto), 15                     cocos2dx_csloader.ini : (cocos2dx_csloader, lua_cocos2dx_csloader_auto), 16                     }

改变为:

1         cmd_args = {lua_custom_api.ini : (lua_custom_api, lua_custom_api_auto), 2                     }

这样我们在执行./custom_genbindings.py时,只绑定我们自定义的C++文件。

6、进入目录frameworks/cocos2d-x/tools/tolua/,执行./custom_genbindings.py

cd frameworks/cocos2d-x/tools/tolua/
./custom_genbindings.py

一定要进入tolua目录,否则执行失败。

如果成功,会在cocos/scripting/lua-bindings/auto目录中生成lua_custom_api_auto.hpp/cpp两个文件,并在api目录中生成lua_custom_api_auto_api.lua说明文件。

7、引入lua_custom_api_auto

Xcode打开项目工程,选中cocos2d_lua_bindings项目工程,把lua_custom_api_auto.hpp/cpp这两个文件引入到auto目录下

 技术分享

打开Build Phases,把.cpp放到Complie Sources下,.hpp放到Headers下:

技术分享

8、引入自定义的C++文件

选中cocos2d_libs工程,类似的把MyClass.h和MyClass.cpp文件引入进来。

9、使用自定义C++文件

打开我们项目的AppDelegate.cpp文件,把以下代码加入到合适的位置:

1     lua_State *state = stack->getLuaState();
2     lua_getglobal(state, "_G");
3     register_all_custom_api(state);
4     lua_pop(state, 1);

当然不要忘了把lua_custom_api_auto.hpp引入:

#include "lua_custom_api_auto.hpp"

重新编译cocos2d_lua_bindings、cocos2d_libs工程,至此就可以使用自定义的C++类了。

 

MAC版Lua使用自定义C++文件

标签:

原文地址:http://www.cnblogs.com/SouthRiver/p/4273029.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!