这几天要老大要求把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. 带你走进SAP项目实施过程——前言(0)

    欢迎关注博主的微信公众号,每天提供原创的SAP技术和项目管理新资讯! 一直很想写一些关于SAP项目管理以及实施过程的系列文章,讲述企业SAP项目从立项开始到启动,再到实施过程,直到最后的上线及总结.我 ...

  2. vue-cli脚手架npm相关文件解读(2)webpack.prod.conf.js

    系列文章传送门: 1.build/webpack.base.conf.js 2.build/webpack.prod.conf.js 3.build/webpack.dev.conf.js 4.bui ...

  3. Oracle 11g的安装

    选择对应版本的Oracle 11g: 解压之后,点击"setup.exe"进行安装. 如果希望接受Oracle的广告邮件可以留下自己的电子邮件地址, 如果希望通过My Oracle ...

  4. ExtJs6获取form里的数据

    1.PanoramForm.js form的items部分 items: [{ xtype: 'form', id:'customerF', modelValidation: true, defaul ...

  5. 002-Apache Maven 构建生命周期

    Maven - 构建生命周期 什么是构建生命周期 构建生命周期是一组阶段的序列(sequence of phases),每个阶段定义了目标被执行的顺序.这里的阶段是生命周期的一部分. 举例说明,一个典 ...

  6. 排序算法——选择排序(js语言实现)

    选择排序:顾名思义选择,选择排序属于O(N^2)的排序算法,意思就是选择数组中的最小的拿出来放在第一位,然后再剩下的数里面,选择最小的,排在第二位,以此类推. 例如:8  3  4  5  6  2  ...

  7. [2014-08-28]Mac系统上的几个命令解释器(控制台)

    irb 语言:Ruby 帮助:help 清屏:CTRL+L 自动完成:Tab+Tab (若未开启,则在/etc/irbrc中require 'irb/completion') 退出:quit/exit ...

  8. 表单校验demo

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. java 读取json

    http://blog.csdn.net/5iasp/article/details/38545875 private void readAccount() throws IOException { ...

  10. C# 异步编程2 EAP 异步程序开发

    在前面一篇博文记录了C# APM异步编程的知识,今天再来分享一下EAP(基于事件的异步编程模式)异步编程的知识.后面会继续奉上TPL任务并行库的知识,喜欢的朋友请持续关注哦. EAP异步编程算是C#对 ...