查看【Quick-COCOS2D-X 3.3 怎样绑定自己定义类至Lua之二】新建项目中配制环境,我们完美的在新建项目中完毕了绑定须要的环境,接下来才是最关健的一步。绑定自己定义C++类至Lua。

其实引擎为了方便我们应对不同平台,已经帮我们创建了不同平台的project项目。

为了编辑代码方便。我使用VS2013打开了"runtime-src"文件夹下的"proj.win32"project。 前往项文件夹径“F:\Cocos2dx-Lua\Garfield\frameworks\runtime-src\Classes”。我将在这里创建一个自己定义类"Pet",代码例如以下。


watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbWFycG9vbHM=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">




仅仅是一个非常easy的Pet类。


1.继承于引擎定义的精灵类Sprite;
2.通过引擎定义的宏CREATE_FUNC(Pet)定义一个静态方法create();
3.两个成员函数init()、setPet();
4.具有一个数据成员name。

    很的简单。我们正是要一切从简单開始。只是须要再次提醒的是我们是在“F:\Cocos2dx-Lua\Garfield\frameworks\runtime-src\Classes”创建了Pet类,一会我们将用到这个路径。


    准备好定义C++类之后,我们再回想一下上一小节的内容,我们在环境測试中。通过运行“genbindings.py"脚本将Cocos2d-x引擎中全部的C++类文件绑定至Lua。(尽管測试环境时。我并没有说明这点。

可是实事上在最后的结果中能看到"Generating
lua bindings succeeds"
这种提示,聪明的读者一定猜到了它所完毕的工作就是绑定C++类至Lua)。


接下来。打开 "genbindings.py,假设你对Python语言并不熟悉。哪请忽略其他的代码,仅仅须要把你的视线焦点集中在 133 行至 151 行。

// 指定tolua所在的录径 无需改动

tolua_root = '%s/tools/tolua' % project_root

// 指定绑定脚本运行后,产生的绑定一系列文件输出保存于何路径

// 尽管无需改动,可是我们要记住,我们产生的绑定文件是输出于

// "F:\Cocos2dx-Lua\Garfield\frameworks\cocos2d-x\cocos\scripting\lua-bindings\auto"

output_dir = '%s/cocos/scripting/lua-bindings/auto' % project_root

// 这个数组中指定了要运行绑定脚本的一些配制參数 ,看到第一行。'cocos2dx.ini' 是一个配制文件,我们能够在"genbindings.py"同级文件夹中找到它。‘cocos2d-x’实际上是在 'cocos2dx.ini'
配制文件里的第一行所指定的一个字符常量,主要是用于生成绑定桥接文件时。为诸如条件编译 ifndef 及 生成的注冊自己定义类接口取名所用。一会我将会在后面稍提这点,这里假设不明确。请临时忽略它。‘lua_cocos2dx_auto’是给生成的绑定桥接文件指定的言语件名。

cmd_args  = {'cocos2dx.ini' : ('cocos2d-x', 'lua_cocos2dx_auto'), \

... ...

}

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbWFycG9vbHM=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

了解"genbindings.py"之后在它的同级文件夹你能够找到”cocos2dx.ini“,这是与之息息相关的配制文件。打开它,我们稍做了解。

请关注于 第 1、4、8、25 、29行。

还记得上面我们提到的数组吗?

cmd_args  = {'cocos2dx.ini' : ('cocos2d-x', 'lua_cocos2dx_auto'), \

... ...

}

第 1 行就是第二个參数指定的字符内容

第 4 行是一些条件编译 ifndef 及 生成的注冊自己定义类接口取名所用的前缀。前面我们已经提到过。

第  行是指定该绑定类的命名空间

行指定须要绑定的自己定义类头文件路径

第29行 指定绑定的C++自己定义类导出后的Lua类文件名称

了解这些之后。我们将对这两个文件进行一些改动,用于完毕我们的类至Lua的绑定。

首先我们拷贝一份'cocos2dx.ini',将其命名为
'custom_pet.ini'。拷贝一份'genbindings.py',将其命名为 'custom_pet_genbindings.py'。

修改'custom_pet.ini'第
1、4、8、25 、29行。例如以下:

由于我们没有指定名字空间。所以第
8 行'target_namespace'将其赋空。

而'headers'其中仅仅是相对路径的给定。还记得"Pet"类我们是创建于哪里吗?

正是在F:\Cocos2dx-Lua\Garfield\frameworks\runtime-src\Classes”。

OK。接下来我们修改'custom_pet_genbindings.py'。关注于第
133 至 138 行,我们将在这里做一些改动。例如以下:

在cmd_args參数表中,我们指定该Python绑定脚本的配制文件为我们改动好的'custom_pet.ini'。

一些可能会用到的命名前缀为'custom_pet'。指定导出的桥接文件名称为'lua_pet_auto'。

最后。我们运行'custom_pet_genbindings.py'。

"Generating lua bindings succeeds"。

见到它,你该欢呼了:)。你已经完毕了C++自己定义类至Lua的绑定。

在下一小节中,我们来探索下,怎么样在你的项目中使用Lua调用Pet类。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbWFycG9vbHM=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

【Quick-COCOS2D-X 3.3 怎样绑定自己定义类至Lua之三】动手绑定自己定义类至Lua的更多相关文章

  1. LUA和C++绑定的一些天然的麻烦

    最近在看Luatinker的源代码,打算自己改(仿写)写搞一个简单的封装C++和LUA的结合的库,结果发现其实麻烦和困惑比想象的多. 比如这些点: 1)有时候使用模板的时候,引用会退化. classt ...

  2. 使用jquery移除前面通过onclick绑定的元素的事件,然后重新绑定别的函数来执行onclick事件。

    http://caibaojian.com/css3/experience/bugs.htm 使用jquery移除前面通过onclick绑定的元素的事件,然后重新绑定别的函数来执行onclick事件. ...

  3. jQuery绑定和解绑点击事件及重复绑定解决办法

    原文地址:http://www.111cn.net/wy/jquery/47597.htm 绑点击事件这个是jquery一个常用的功能,如click,unbind等等这些事件绑定事情,但还有很多朋友不 ...

  4. WPF 让普通 CLR 属性支持 XAML 绑定(非依赖属性),这样 MarkupExtension 中定义的属性也能使用绑定了

    原文:WPF 让普通 CLR 属性支持 XAML 绑定(非依赖属性),这样 MarkupExtension 中定义的属性也能使用绑定了 版权声明:本作品采用知识共享署名-非商业性使用-相同方式共享 4 ...

  5. cocos2dx lua binding ,cocos2dx 绑定lua测试

    前面2篇分别简单介绍 手动bind C++ 类和lua:http://blog.csdn.net/chenee543216/article/details/12074771 使用tolua++简化工作 ...

  6. Silverlight中的TabControl如何绑定数据?重写tabcontrol和tabItem 解决绑定友好问题。可以绑定对象集合

    在 WPF 中,TabControl 可以直接将 ItemsSource 绑定数据源,见 将 TabControl 绑定到数据的示例 http://msdn.microsoft.com/zh-cn/l ...

  7. SpringMVC(六):@RequestMapping下使用@RequestHeader绑定请求报头的属性值、@CookieValue绑定请求中的Cookie值

    备注:我本地浏览器的报头(Request Header)信息如下: Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image ...

  8. 如何理解一台服务器可以绑定多个ip,一个ip可以绑定多个域名

    一个域名只能对应一个IP的意思是域名在DNS服务器里做解析的时候 一条记录只能指向一个IP地址.这个是死规定,试想一下,如果一个子域名指向了2个ip ,当访问者打开这个域名的时候,浏览器是展示哪个IP ...

  9. TP5.1:依赖注入、绑定一个类到容器里、绑定一个闭包到容器中

    依赖注入 1.在application中创建一个文件夹,名字为commom,commom文件夹中创建被注入文件夹,在被注入文件夹中创建一个名为demo.php的文件 2.在demo.php中输入: 3 ...

随机推荐

  1. Lisp: Common Lisp, Racket, Clojure, Emacs Lisp - Hyperpolyglot

    Lisp: Common Lisp, Racket, Clojure, Emacs Lisp - Hyperpolyglot Lisp: Common Lisp, Racket, Clojure, E ...

  2. Oracle百问百答(一)

    Oracle百问百答(一) 01.如何查看oracle的版本信息? 02.如何查看系统被锁的事务信息? 03.怎么获取有哪些用户在使用数据库? 04. 数据表中的字段最大数是多少? 表或视图中的最大列 ...

  3. POJ 1742 hdu 2844 Coins

    题目链接:http://poj.org/problem?id=1742 http://acm.hdu.edu.cn/showproblem.php?pid=2844 题目分类:动态规划 代码: #in ...

  4. IOS7最新的系统漏洞

    苹果近期就实用户发现了一个新iOS7系统漏洞,利用这个漏洞绕过password输入界面,在不知道password的情况下打开你近期使用的软件. 而这个过程仅仅需短短的5秒钟! 经測试,这个漏洞并没那么 ...

  5. OCP读书笔记(9) - 诊断数据库

    数据库恢复顾问 Data Recovery Advisor的命令行选项 1. 启动 RMAN 进程并连接到目标$ rman target=/ 2. 假设发生了某个错误,希望找出原因,使用 list f ...

  6. POj 1879 Tempus et mobilius Time and motion (模拟+群)

    题目特别长,大意为球的传递. 三个轨道,一个库.各自是分钟单位的轨道.5min单位的轨道.一小时单位的轨道.还有就是n容量的库. 每过一分钟,一个小球从库里面出来,库符合先进先出,进入分钟轨道.假设分 ...

  7. Ubuntu 8.04下安装DB2方法

    參考文献: How-to: Ubuntu 7.10 Server x86 32-bit and DB2 Express-C v9.5 DB2 v9.7 Infomation Center 场景:在IB ...

  8. hdu4004(二分)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4004 大致题意 二分最大跳跃能力,判断是否可以在m次内到达对岸! 分析:由于求青蛙最小弹跳能力,所以二 ...

  9. Xenu-web开发死链接检測工具应用

    Xenu 是一款深受业界好评,并被广泛使用的死链接检測工具. 时常检測站点并排除死链接,对站点的SEO 很重要,由于大量死链接存在会减少用户和搜索引擎对站点的信任,web程序开发者还可通过其找到死链接 ...

  10. Android 通过调用系统,如接口 谷歌语音、百度语音、科大讯飞语音等语音识别方法对话框

    现在app在发展过程中会集成一些语音识别功能,不具有其自己的显影剂一般正在开发的语音识别引擎,所以在大多数情况下,它是选择一个成熟的语音识别引擎SDK集成到他们的app在. 平时,这种整合被分成两个, ...