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

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文件,防止绑定污染。
Cocos2d-x开发系列 交叉开发模式五 绑定C++对象到Lua_第1张图片

1、修改python文件
Cocos2d-x开发系列 交叉开发模式五 绑定C++对象到Lua_第2张图片

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/android

cocos_flags = -DANDROID

cxxgenerator_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 = Helper

base_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

你可能感兴趣的:(hybrid交叉开发)