zoukankan      html  css  js  c++  java
  • 使用cocos2d脚本生成lua绑定


    这几天要老大要求把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调用的时候,会告诉你找不到

  • 相关阅读:
    vue项目搭建
    js监听input输入框值的实时变化实例
    nodejs-Child Process模块
    nodejs-Express框架
    前端的存储技术cookie、sessionStorage、localStorage
    node.js之path
    css两列自适应布局的多种实现方式及原理。
    React jQuery公用组件开发模式及实现
    js创建对象的几种方式
    IE9 不F12打开控制台,代码不执行。打开后正常
  • 原文地址:https://www.cnblogs.com/boliu/p/4035390.html
Copyright © 2011-2022 走看看