Cocos2d-x开发系列 交叉开发模式五 绑定C++对象到Lua

来源:互联网 发布:编程一小时网站 编辑:程序博客网 时间:2024/06/14 19:02

Quick版本是一个不错的解决方案,现在虽然从被触控收购到摒弃,到社区版本,并不是这个玩意儿不行,而是时代在发展。它就大量给我们提供了大量的集成和封装,我们可以更关注于逻辑层的开发。对于很多小开发团队来讲,是利好。接着之前讲的,我们今天的主题是讲C++对象绑定接口到Lua。使用tolua++。

C++对象怎么在Lua调用?
需 通过lua库提供的接口,通过C将C++和Lua交互,通过一个虚拟栈。那么我们在Lua中相当于有根C++的这个对象有绑定关系了。

要绑定的C++对象语法上有什么需要注意的?
Lua跟C++交互是通过C来实现的,Lua不是直接跟C++交互,而是C语言。因为Lua本身是用标准C开发的,所以这也是Lua跟C++、Java等交互的原因。所以C++的内容不一定支持。不过Lua bindings给我们提供了很好的支持,会给我们提供错误信息。所以有的时候我们需要自己去写函数注册,
引擎目录 lua-bindings文件夹下会有auto和manual两个文件夹,分别放着自动和手动的绑定。目前来看C++11的语法部分需要手动绑定。我们照着引擎的类去写就可以了,至少保证不会出问题。

步骤:
一、写好C++对象

#ifndef __WW_DDZ_PLUS__LuaToast__#define __WW_DDZ_PLUS__LuaToast__#include "cocos2d.h"class LuaToast{public:    static void showToast(const std::string& msg, float duration);};#endif /* defined(__WW_DDZ_PLUS__LuaToast__) */
#include "LuaToast.h"#include "DDZ/Data/GameData/ToastDef.h"#include "DDZ/Data/GameData/CustomEventConstant.h"void LuaToast::showToast(const std::string& msg, float duration){    ToastDef *def = ToastDef::create(msg, duration);    cocos2d::Director::getInstance()->getEventDispatcher()->dispatchCustomEvent(EVENT_SHOW_TOAST, def);}

二、在配置文件中配置好
Copy一个ini文件,然后改名叫ww_gui.ini 专门用来绑定GUI相关的对象。当然我门也可以分类别建ini文件,防止绑定污染。
这里写图片描述

1、修改python文件
这里写图片描述

2、设置绑定的ini文件
这里将这个文件copy展示

**[ww_gui]****prefix = ww_gui****target_namespace = ww**…...cocos_headers = -I%(cocosdir)s/cocos -I%(cocosdir)s/cocos/editor-support -I%(cocosdir)s/cocos/platform/androidcocos_flags = -DANDROIDcxxgenerator_headers =extra_arguments = %(android_headers)s %(clang_headers)s %(cxxgenerator_headers)s %(cocos_headers)s %(android_flags)s %(clang_flags)s %(cocos_flags)s %(extra_flags)s**headers = %(cocosdir)s/../Classes/ToLua.h****classes = LuaToast****skip =**rename_functions =rename_classes =remove_prefix =classes_have_no_parents = Helperbase_classes_to_skip =abstract_classes =script_control_cpp = no

如上,粗体字部分,设置好模块名,命名空间,我们注意设置下即可,需要注意的是headers路径,classes设置我们的对象名。另外我们可以在skip中设置该兑现中的函数不绑定接口。可以如下设置:
类对象名::[函数一 函数二]

三、执行
执行genbindings_wawagame.py。一般情况下,我们需要根据README.mdown设置好环境。注意如果是在iOS下的时候,需要设置权限。
chmod a+x ./genbindings_wawagame.py 授权
./genbindings_wawagame.py 执行

四、iOS下设置cocos环境参数

#android sdk export ANDROID_SDK_ROOT=/Users/Columbus/Documents/environment/adt-bundle-mac-x86_64-20140624/sdk export PATH=$PATH:$ANDROID_SDK_ROOT export PATH=$PATH:$ANDROID_SDK_ROOT/platform-tools #ndk export NDK_ROOT=/Users/Columbus/Documents/environment/android-ndk-r9b export PATH=$PATH:$NDK_ROOT #ant export ANT_ROOT=/Users/Columbus/Documents/environment/apache-ant-1.9.3/bin export PATH=$PATH:$ANT_ROOT
1 0
原创粉丝点击