zoukankan      html  css  js  c++  java
  • JSBing-js自动绑定C++

    什么是JSB

    JSB是JavaScript binding的简称。Cocos2d-JS中使用的javascript引擎是Mozilla 的spidermonkey,而JSB绑定的目的就是让javascript脚本能够调用到c++代码,c++代码能够调用到javascript脚本。

    怎么生成JSB绑定

    1、自动生成脚本

    (1)、确认好你的Binding-generator

      cocos2d-x下载下来后,tools目录底下有一个名为bindings-generator的文件夹,这就是自动绑定需要的工具。
      如果仍需下载,请到github。
      GitHub repository: https://github.com/cocos2d/bindings-generator

    2)、下载MacPorts软件包管理系统,通过MacPorts我们可以通过命令行快速的安装需要的软件(官方网站: http://www.macports.org/install.php)。

          安装完后需要在.bash_profile里添加搜索路径:具体方法是在终端输入vim ~/.bash_profile,然后分别插入export PATH=/opt/local/bin:$PATH 、export PATH=/opt/local/sbin:$PATH。

        使用MacPort前应该首先更新Port的index,输入: $ sudo port -v selfupdate (强烈推荐第一次运行的时候使用-v参数,显示详细的更新过程)

        (注:在使用MacPort时提示找不到port,要确定是否设置好搜索路径等环境变量)

    (3)、开始使用MacPort安装需要软件

    • Python 2.7.x(下载地址):目前引擎里面的bindings-generator只支持python2.7.x版本

    • py-ymal(下载地址):这是python的一个第三方包,下载页有不同系统的安装方式,可以参考generator.py会调用到这个包。

    • cheetah(下载地址):这也是python的一个第三方包,一个模板,generator.py会调用到这个包,安装方式跟py-ymal相同。

      sudo port install python27 py27-yaml py27-cheetah

      安装 llvm-3.3,这个需要单独下载安装,下载地址 http://llvm.org/releases/download.html#3.3

      下载完后请解压至Users/你的名字/bin底下,并将解压岀來的文件夹更名成clang+llvm-3.3。如果沒有bin文件夹,请自行创建。最后的路径应该是这样的:

      /Users/lp43/bin/clang+llvm-3.3(lp43是我的名字)
      安装android ndk r9,这个下载安装可自行百度
    (4)、修改自动邦定的配置文件,将bindings-generator est下的userconf.ini.sample和user.cfg.sample重命名为userconf.ini、user.cfg。
      userconf.ini内容修改为:
      androidndkdir=android-ndk-r9存放目录
      clangllvmdir=llvm-3.3安装目录
      cxxgeneratordir=bindings-generator存放目录
      user.cfg内容修改为:
      [DEFAULT]
      PYTHON_BIN=python2.7安装目录
    (5)、已test.ini为模版修改自动邦定规则
      先了解test.ini中变量含义:
      name: 单纯只是名称。
      prefix: 最后生成的文件都会以这个命名前缀,如 prefix.cpp, prefix.hpp, prefix_api.js 
      classes: 你的所需转换的类的名称,必须是所导入的头文件中所有的类,这里可以使用正则表达式来加入多个类,参考cocox2dx.ini。
      extra_arguments: 一些接口所需的系统参数。如clang包,android ndk包的引入所需的系统参数,写法可以参照以上三个.ini。 
      headers: 你所需要绑定的头文件路径。 
      target_namespace:命名空间。最后生成的JS文件的类,会以这个命名空间开头。例如你的类为sqlite,命名空间为cocos2dx,那么最后生成的就是  cocos2dx.sqlite。 
      rename_functions:可以将你要绑定的方法的名称更改成你所要的。可以更改多个,用逗号隔开,写法参照 SqliteCpp::[sqlite3_execCpp=sqlite3_exec],这个就是将SqliteCpp中的sqlite3_ execCpp方法重命名为sqlite3_exec方法。
      rename_classes :同上,重命名类。
      skip :跳过你所不需要绑定的方法和类,于是就不生成。
      将test.ini重命名为cocos2dx_custon.ini,然后主要修改name、prefix、classes、headers、target_namespace。
    (6)、修改完test.ini后还需要修改下test.py这个脚本,打开test.py找到custom_cmd_args添加
     coco2dx_coustom对应cocos2dx_custon.ini里面的name,jsb_cocos2dx_custom对应cocos2dx_custon.ini里面的prefix
    (7)、生成绑定文件,运行命令python ./test.py,成功后可以在frameworks/cocos2d-x/cocos/scripting/js-bindings/custom文件夹下看到生成的绑定文件。(注:生成目录可能有所不同)

    (8)、绑定文件使用,将文件加入工程
                        

    打开 jsb_cocos2dx_custom.hpp找到register_all_cocos2dx_custom(JSContext* cx, JSObject* obj),然后将绑定js注册到AppDelegate.cpp里面sc->addRegisterCallback(register_all_cocos2dx_custom);

    (注:记得绑定到原文件也要加到工程中,jsBing只是个转接口)

    (9)、测试

       var customClass = cc.CustomClass.create();

         var msg = customClass.helloMsg()

          cc.log("customClass's msg is : " + msg)

    注:绑定原文件如下

     

    cocos2dx_custon.ini文件
     

        

     

  • 相关阅读:
    SpringMVC中静态获取request对象 Spring中获取 HttpServletRequest对象【转载】
    springcloud 的loadbalancer 轮询算法切换方法 2021.4.3
    springboot项目启动增加图标
    rabbitmq 端口作用以及修改方法
    centos8 安装rabbitmq
    springcloud config client Value获取不到信息的问题的处理方法
    springcloud config配置git作为数据源然后启动报错 If you want an embedded database (H2, HSQL or Derby), please put it on the classpath.
    Sublime Text的列模式如何操作
    centos8 安装redis
    jQuery简单的Ajax调用
  • 原文地址:https://www.cnblogs.com/guangyun/p/6048152.html
Copyright © 2011-2022 走看看