这几天要老大要求把DragonBones移到cocos2dx 3.0 里边,并且绑定lua使用接口。因为刚学lua,使用的引擎也刚从2.2改为3.0,各种不熟悉,折腾了好几天才弄完,有空了总结一下

这篇先说一下cocos2d生成lua绑定的修改,有空的话再写一篇lua中注册回调到c++中方法


 

我的目录结构

假设我的目录名称是DragonBones

  • -Cocosdx目录
  • -DragonBones 
    • -c代码
    • -c代码头
    • -tools 
      • db_DragonBones.ini
      • genbindings.py
    • -scripting 这个目录是用来存放自动生成的文件的

 

genbindings.py中的修改

  • project_root 项目路径 这里我要把DragonBones目录设置为项目路径,但是我的脚本运行目录是在tools下的 所以设置如下

    project_root = os.path.abspath(os.path.join(os.path.dirname(file), '..'))

  • cocos_root 设置coco2dx项目的路径

    cocos_root = os.path.abspath(os.path.join(project_root, '..', 'cocos2d-x'))

  • 设置解析脚本路径 这个路径主要是用来配置cocos2d-x/tools/bindings-generator/generator.py 文件路径的

    cxx_generator_root = os.path.abspath(os.path.join(cocos_root, 'tools/bindings-generator'))

  • 这个是设置配置文件路径 其实就是db_DragonBones.ini的路径 和当前.py文件在同一个目录下

    script_root = '%s/tools' % project_root

  • 设置生成文件的目录 就是生成的那些.hpp 和.cpp 以及lua的路径

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

  • 要生成lua绑定的源文件参数

    cmd_args = { 
    'db_DragonBones.ini' : ('db_DragonBones', >'lua_DragonBones_auto'), 
    }

    • db_DragonBones 这个参数不知道做什么用的,但是要保证和db_DragonBones.ini内第一行中括号里的名字一样 一般和 ini文件名相同
    • lua_DragonBones_auto 定义生成的hpp 和 cpp的文件名

 

ini文件中的修改

  • 方法前缀

    prefix = db_DragonBones

  • lua里要用到的名称空间 其实就是要把绑定的类放在一个叫db的表里,防止和别的绑定的方法或类冲突

    target_namespace = db

  • native代码中的原名称空间

    cpp_namespace = dragonBones

    这里得注意一下,这个加上之后发现native中 dragonBones命名空间下的方法没有转成在lua中的db 原因是因为需要在cocos2d-x/tools/bindings-generator/targets/lua/conversions.yaml 内加入名称空间的转换

    ns_map: 
    "dragonBones::": "db."

  • 头文件 这个里边要include了所有要暴露方法的头文件 参考目录是cocos2dx的目录来设置头文件目录

    headers = %(cocosdir)s/../headers.h

  • 要生成的类 需要暴露给lua用的类都要写在这里

    classes = AnimationData ...

  • 要跳过不生成lua接口的的方法 我这里是重载等号操作符有问题,在说本来在lua里边也不会这么调用,不如过改个方法名实现类似的功能来做

    skip = AnimationData::[operator=],


设置的都差不多了

这里不得不提的是,看一下conversions.yaml这个文件就大约知道这个脚本创建的过程是怎么映射的

最重要的一句话,暴露给lua的接口和类尽量简单,这个中间的问题越少

因为你不注意的话,有写接口编译什么的没问题,lua调用的时候,会告诉你找不到

使用cocos2d脚本生成lua绑定的更多相关文章

  1. QFramework 使用指南 2020 (四):脚本生成(2)ViewController 与 ViewController 嵌套绑定

    在上一篇,我们学习了,脚本生成的基本使用. 在这一篇,我们试着深入,聊聊脚本生成给我们带来的便利. 脚本生成的便利 首先,我们要知道,在 Unity 的游戏世界中都是以 GameObject 为单位的 ...

  2. cocos2dx的lua绑定

    一.cocos2dx对tolua++绑定的修正 A.c对lua回调函数的引用 在使用cocos2dx编写游戏时,我们经常会设置一些回调函数(时钟.菜单选择等).如果采用脚本方式编写游戏的话,这些回调函 ...

  3. c/c++导出lua绑定

    [转载]https://note.youdao.com/share/?id=0f4132271151c4b62f9afb712e8304d9&type=note#/ 1.在纯C环境下,把C函数 ...

  4. c++自动导出lua绑定

    cocos 使用bindings-generator脚本代替了toLua++. 编写效率大大提高. 具体的在本机中分享:http://note.youdao.com/noteshare?id=0f41 ...

  5. Cocos2d-x v3.3 lua绑定c++类方法总结

    网上有很多cocos2d-x lua绑定c++类的接口教程,这篇文章也是总结他们的经验. 其中重点参考了 http://cn.cocos2d-x.org/tutorial/show?id=1295, ...

  6. 生成lua的静态库.动态库.lua.exe和luac.exe

    前些日子准备学习下关于lua coroutine更为强大的功能,然而发现根据lua 5.1.4版本来运行一段代码的话也会导致 "lua: attempt to yield across me ...

  7. 用VC编译lua源码,生成lua语言的解释器和编译器

    用VC编译lua源码,生成lua语言的解释器和编译器 1.去网址下载源码 http://www.lua.org/download.html 2.装一个VC++,我用的是VC6.0 3.接下来我们开始编 ...

  8. cocos2dx lua 绑定之二:手动绑定自定义类中的函数

    cococs2dx 3.13.1 + vs2013 + win10 1.首先按照<cocos2dx lua 绑定之一:自动绑定自定义类>绑定Student类 2.在Student类中增加一 ...

  9. Cocos2d-x 脚本语言Lua中的面向对象

    Cocos2d-x 脚本语言Lua中的面向对象 面向对象不是针对某一门语言,而是一种思想.在面向过程的语言也能够使用面向对象的思想来进行编程. 在Lua中,并没有面向对象的概念存在,没有类的定义和子类 ...

随机推荐

  1. VMware Workstation 12 Pro 之安装林耐斯-LinuxMint-系统

    VMware Workstation 12 Pro 之安装林耐斯-LinuxMint-系统... ---------------------- ---------------------------- ...

  2. Nginx入门案例(Mac版)

    Nginx(engine x)是一个轻量级.高性能的Web和反向代理服务器,也是一个IMAP.POP3和SMTP服务器,并且安装十分简单,配置文件非常简洁,启动特别容易,运行十分稳定,几乎可以做到7* ...

  3. 【javascript】异步编年史,从“纯回调”到Promise

    异步和分块——程序的分块执行   一开始学习javascript的时候, 我对异步的概念一脸懵逼, 因为当时百度了很多文章,但很多各种文章不负责任的把笼统的描述混杂在一起,让我对这个 JS中的重要概念 ...

  4. 如何删除当前正在使用的SQLLite文件?

    从网上搜索一大堆,套路几乎相同,但自己就是不行,怎么也不行,为什么不行呢?不行的话别人肯定不来坑博友了呀.然后放了一会,去拿下午茶回来,再次来看,恍然大悟,What?这么简单. 一开始代码如下: he ...

  5. 【渗透课程】特别篇-主流网站程序Oday大全以及拿shell思路

    版权和内容说明: 这篇文章不是本站编写,是从网络上摘抄的,但是经过了本站的改写优化,并将内容,格式规范化. 本篇说明:这篇文章结合了前辈们前几年一路挖掘出来的主流程序漏洞以及思路, 小编写在前面是想让 ...

  6. Servlet中Response对象应用2(输出随机验证码图片)

    预期结果如图: 可用于登陆界面的验证 需要使用random类和绘画相关的几个类.以及imageio的内容. import java.awt.*; import java.awt.image.Buffe ...

  7. 使用Coding.net+Hexo+node.js+git来搭建个人博客

    使用Coding.net来搭建基于Hexo的博客 一.准备工作 什么是Coding.net Coding可以说,就是国产的Github,但是,有一个功能使它似乎超越了GitHub-那就是 Web ID ...

  8. XWPFRun属性详解

    XWPFRun是XWPFDocument中的一段文本对象(就是一段文字) 创建文档对象 XWPFDocument docxDocument = new XWPFDocument(); 创建段落对象 X ...

  9. HTML5新增属性data-*和js/jquery之间的交互

    HTML5新增属性data- data-自定义属性,这种方式的自定义属性解决属性混乱无状态管理的现状 书写实例 <div data-role="page" data-last ...

  10. 微信iOS收款到账语音提醒开发总结

    本文来自于腾讯Bugly公众号(weixinBugly),未经作者同意,请勿转载,原文地址:https://mp.weixin.qq.com/s/yYCaPMxHGT9LyRyAPewVWQ 作者:l ...