之前在接入sdk 的时候,因为sdk那边分了 android 和 ios 写两次吧,改的时候也难得改,所以直接写在了c++层 ,这样大家都方便,可是自己写的代码,如何在js调用呢,后面发现,cocos 是提供了这方面的东西的,我们只需要做一个小小的改动就可以直接使用了,直接进入正题:

关于接的sdk,我就不贴出来了,sdk ,你懂得 恶心的很 这里纯粹做个例子


js new 工程我就不说了 自己百度

1,frameworks/runtime-src/Classes/testBind 新建两个文件 这里是测试 我附上代码

TestBind.hpp


#ifndef TestBind_hpp

#define TestBind_hpp

#include<stdio.h>

#include"cocos2d.h"

#include<stdio.h>


//这里必须定义空间名称

namespaceTestBind {

classTestBindCalss

{

public:

voidtestPrint();

private:

voidtestPrintPrivate();

protected:

voidtestPrintProtected();


};

};


#endif/* TestBind_hpp */


TestBind.cpp:

#include"TestBind.hpp"


namespaceTestBind {

voidTestBindCalss::testPrint(){

cclOG("%s","测试绑定代码---- testPrint");

}

voidTestBindCalss::testPrintPrivate(){

cclOG("%s","测试绑定代码---- testPrintPrivate");

voidTestBindCalss::testPrintProtected(){

ottom:0px; padding-top:0px; padding-bottom:0px; color:rgb(69,"测试绑定代码---- testPrintProtected");

}


这就是个简单的c++ 程序代码,先放到这里,我们去准备绑定需要的东西

因为一般是为当前项目准备的 那么 为了不影响另外的项目 在我们的工程下 新建 一个文件夹

tools/tojs (为什么这么命名? 因为cocos 是这么命名的 我也跟着他命名)

接下来是很关键的一步

在你的cocos引擎下 这个目录

cocos_tool/cocos2d-x-3.13/tools 找到 bindings-generator 拷贝到 项目工程的tools/tojs

ps: 这里最好是拷贝你当前的引擎的bindings-generator 版本不同 会出问题 ,如果后面出了问题 ,那么请确认 这里是不是有问题

原本 cocos 是有文件的 那么我们拿来简单用就行了

老规矩 拷贝----- cocos2d-x-3.13/tools/tojs/genbindings.py ----> tools/tojs/genbindings.py

什么 你想试试 ? 好 我们先试试

tools/tojs ⮀ ⭠ develop ●✚ ⮀ python genbindings.py
PYTHON_BIN not defined,use current python.
generating userconf.ini...
Generating bindings for cocos2dx...
/usr/bin/python: can't open file '/。。。。。。/tools/bindings-generator/generator.py': [Errno 2] No such file or directory
-------------------------------------
Generating javascript bindings fails.
-------------------------------------

什么 路径有问题? 那我们打开文件看看 找到 给 cocos_root = os.path.abspath(project_root) 赋值的地方

因为我们是针对当前项目的 改了吧 改到当前工程来

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

万一你要是不高兴 改了自己项目下的东西 想跑一个 试试呢 对吧

好 第二个路径

jsb_root = os.path.abspath(os.path.join(project_root,'cocos/scripting/js-bindings'))

这个路径嘛 无所谓 高兴用哪个就用哪个

jsb_root = os.path.abspath(os.path.join(cocos_root,'cocos/scripting/js-bindings'))

下一个

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

这个很重要,他是问你 使用哪个解析器 那不废话吗 用我们刚刚拷贝的那个就行了,,接着改吧

一般的话 我们输出的东西 针对当前项目修改的c++文件 我们都是放在 runtime-src 下 便于管理 和 使用

好 那我们定义一个 直接写在 cxx_generator_root 后面就行了

runtime_src = os.path.abspath(os.path.join(project_root,'runtime-src'));

往下 有个# save config to file

好吧 我们也做一次

config.set('DEFAULT','runtime_src',runtime_src)

下面的就是一些基本配置了

tojs_root = '%s/tools/tojs' % project_root
output_dir = '%s/cocos/scripting/js-bindings/auto' % project_root

改吧 别废话

tojs_root = '%s/tools/tojs' % project_root
output_dir = '%s/cocos/scripting/js-bindings/auto' % project_root

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

cmd_args = 这个就是你要执行的配置了 里面的内容 全部干掉 没错 就是全部干掉

ps 这部分的完整内容

project_root = os.path.abspath(os.path.join(os.path.dirname(__file__),'..','..')) cocos_root = os.path.abspath(os.path.join(project_root,'cocos2d-x')) jsb_root = os.path.abspath(os.path.join(cocos_root,'cocos/scripting/js-bindings')) cxx_generator_root = os.path.abspath(os.path.join(project_root,'tools/tojs/bindings-generator')) runtime_src = os.path.abspath(os.path.join(project_root,'runtime-src')); # save config to file config = ConfigParser.ConfigParser() config.set('DEFAULT','androidndkdir',ndk_root) config.set('DEFAULT','clangllvmdir',llvm_path) config.set('DEFAULT','cocosdir',cocos_root) config.set('DEFAULT','jsbdir',jsb_root) config.set('DEFAULT','cxxgeneratordir',cxx_generator_root) config.set('DEFAULT','extra_flags','') config.set('DEFAULT',runtime_src)

jsb_root

地方 不要用 # 注释 如果报错 那么一般都是你 加了 注释的原因

想试试 ? 好吧 我们去拷贝一个试试 去拷贝 引擎下/tools/tojs/cocos2dx.ini 到 项目工程 tools/tojs 下

最激动的时候来了 执行 python genbindings.py 等待几秒钟 出现 就成功了

咦, 我不是定义了输出路径是 生成到哪里去了 发现在工程下 多了个cocos 文件夹

这就是我们刚刚跑代码生成的文件 api 生成到 api 目录的 不是制定输出到 runtime 下吗

反过去看 原来是这里没改 runtime-src 都没有使用过 好吧 接着改

output_dir = '%s/cocos/scripting/js-bindings/auto' % project_root 改为

output_dir = '%s/cocos/scripting/js-bindings/auto' % runtime_src
再跑 ,

非常nice 生成成功

现在来开始研究ini 文件 说实话 我也不是很懂 但是 能够用就行了

一般来讲 我们只需要配置这几个东西就行了 拷贝一份 cocos2d.ini

改这几个东西

1, 首行 刚刚我们写的TestBind 那么就叫这个东西吧 [TestBind]

2,prefix = cocos2dx 改为prefix =TestBind


3,target_namespace = cc 这个是你绑定到js 层 要使用的名字 一般 我们用 项目名称 这里 我们就用 projectName

target_namespace =projectName

4,headers = 你要绑定的头文件 ===> headers = %(runtime_src)s/Classes/testBind/TestBind.hpp

5,classes = 需要绑定的类名称

classes = TestBindCalss

6, classes_need_extend = //他没有继承任何东西 所以 我们不写 删掉后面的赋值就行了
classes_need_extend =

下一步 我们在 genbindings.py 修改配置 顺便我重新修改了输出路径

tojs_root = '%s/tools/tojs' % project_root
output_dir = '%s/js-bindings_test/auto' % runtime_src

cmd_args = {
#'cocos2dx.ini' : ('cocos2d-x',\
'cocos2dx_copy.ini' : ('TestBind','TestBind_auto')
            }

执行


似乎是执行成功了 我们去看看 路径下

js-bindings_test/auto

观察 :

这里只导出了 public 的东西 需要的筒子们 自己注意下 别所到时候没有导出来

是不是这个时候就可以用了呢 当然不行 我们最重要的 事情还没有做

打开 appdelegate

引入头文件

#include "js-bindings_test/auto/TestBind_auto.hpp"
然后在

sc->addRegisterCallback 这里 注册


//增加

sc->addRegisterCallback(register_all_TestBind);

切记 写好注释

那么究竟是怎么找到究竟注册哪个呢 看下面:


js-bindings_test/auto/TestBind_auto.hpp 

找到这个 对了 就是这个




重新编译工程 你会发现

ps js 层用法

projectName.TestBindCalss.testPrint();

即可

只有 public 的东西才会被绑定出来 使用的时候 自己注意,

ok,教程完毕,有什么不懂的 可以加我扣扣 465648890 大家一起交流,学习互进!

cocos2d-js 自动绑定代码的更多相关文章

  1. html5 拖拽及用 js 实现拖拽功能的示例代码

    这篇文章主要介绍了html5 拖拽及用 js 实现拖拽,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  2. amaze ui 的使用详细教程

    这篇文章主要介绍了amaze ui 的使用详细教程,本文通过多种方法给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  3. HTML5适合的情人节礼物有纪念日期功能

    这篇文章主要介绍了HTML5适合的情人节礼物有纪念日期功能,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  4. html5录音功能实战示例

    这篇文章主要介绍了html5录音功能实战示例的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  5. 基于 HTML5 WebGL 实现的医疗物流系统

    物联网( IoT ),简单的理解就是物体之间通过互联网进行链接。这篇文章给大家介绍基于 HTML5 WebGL 实现的医疗物流系统,感兴趣的朋友跟随小编一起看看吧

  6. HTML5页面无缝闪开的问题及解决方案

    这篇文章主要介绍了HTML5页面无缝闪开方案,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  7. HTML5跳转小程序wx-open-launch-weapp的示例代码

    这篇文章主要介绍了HTML5跳转小程序wx-open-launch-weapp的相关知识,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  8. ios – 如何使用blender和PowerVR SDK为cocos3d创建一个简单的3d球体

    我是cocos3d的新手.我想创建一个简单的项目–旋转的3d球体.我用搅拌机设计了一个3d球体.所以我想要帮助创建collada文件和pod文件.使用blender和PowerVRSDK创建这个简单的3d对象时应该注意什么.谢谢解决方法如何在搅拌机中制作简单的球体,然后使用JeffLamarche的Blender-to-iOSscript将其导出?这甚至不需要Cocos或PowerVR,但这是一个良好的开端.由于您可以在iOS中轻松地将Cocos与非Cocos类集成,因此可能会有所帮助.你可以更进一步,利

  9. xamarin.ios – 没有找到ViewController ::.ctor(System.IntPtr)的构造函数

    我有一个问题,我的Monotouch应用程序有时在收到内存警告后才会崩溃.请参见下面的堆栈跟踪.堆栈跟踪是正确的,因为指定的类缺少构造函数获取IntPtr参数.但是这是有意的,因为我在应用程序中根本不使用InterfaceBuilder.那为什么会这样呢?

  10. ios – 与Xcode Bots持续集成

    我想使用Xcode机器人进行持续集成.我已经安装了OSXMavericks和Server(版本3).我可以使用Xcode5.0.1创建机器人.在集成时,它正在成功地执行分析测试,但总是最终的集成结果是失败的.IntegrationFailed.Unexpectedinternalservererror.Seetheintegration’slogsformoredetails.`我没有从服务器错误

随机推荐

  1. 【cocos2d-x 3.x 学习笔记】对象内存管理

    Cocos2d-x的内存管理cocos2d-x中使用的是上面的引用计数来管理内存,但是又增加了一些自己的特色。cocos2d-x中通过Ref类来实现引用计数,所有需要实现内存自动回收的类都应该继承自Ref类。下面是Ref类的定义:在cocos2d-x中创建对象通常有两种方式:这两中方式的差异可以参见我另一篇博文“对象创建方式讨论”。在cocos2d-x中提倡使用第二种方式,为了避免误用第一种方式,一般将构造函数设为protected或private。参考资料:[1]cocos2d-x高级开发教程2.3节[

  2. 利用cocos2dx 3.2开发消灭星星六如何在cocos2dx中显示中文

    由于编码的不同,在cocos2dx中的Label控件中如果放入中文字,往往会出现乱码。为了方便使用,我把这个从文档中获取中文字的方法放在一个头文件里面Chinese.h这里的tex_vec是cocos2dx提供的一个保存文档内容的一个容器。这里给出ChineseWords,xml的格式再看看ChineseWord的实现Chinese.cpp就这样,以后在需要用到中文字的地方,就先include这个头文件然后调用ChineseWord函数,获取一串中文字符串。

  3. 利用cocos2dx 3.2开发消灭星星七关于星星的算法

    在前面,我们已经在GameLayer中利用随机数初始化了一个StarMatrix,如果还不知道怎么创建星星矩阵请回去看看而且我们也讲了整个游戏的触摸事件的派发了。

  4. cocos2dx3.x 新手打包APK注意事项!

    这个在编译的时候就可以发现了比较好弄这只是我遇到的,其他的以后遇到再补充吧。。。以前被这两个问题坑了好久

  5. 利用cocos2dx 3.2开发消灭星星八游戏的结束判断与数据控制

    如果你看完之前的,那么你基本已经拥有一个消灭星星游戏的雏形。开始把剩下的两两互不相连的星星消去。那么如何判断是GameOver还是进入下一关呢。。其实游戏数据贯穿整个游戏,包括星星消除的时候要加到获得分数上,消去剩下两两不相连的星星的时候的加分政策等,因此如果前面没有做这一块的,最好回去搞一搞。

  6. 利用cocos2dx 3.2开发消灭星星九为游戏添加一些特效

    needClear是一个flag,当游戏判断不能再继续后,这个flag变为true,开始消除剩下的星星clearSumTime是一个累加器ONE_CLEAR_TIME就是每颗星星消除的时间2.连击加分信息一般消除一次星星都会有连击信息和加多少分的信息。其实这些combo标签就是一张图片,也是通过控制其属性或者runAction来实现。源码ComboEffect.hComboEffect.cpp4.消除星星粒子效果消除星星时,为了实现星星爆裂散落的效果,使用了cocos2d提供的粒子特效引擎对于粒子特效不了

  7. 02 Cocos2D-x引擎win7环境搭建及创建项目

    官网有搭建的文章,直接转载记录。环境搭建:本文介绍如何搭建Cocos2d-x3.2版本的开发环境。项目创建:一、通过命令创建项目前面搭建好环境后,怎样创建自己的Cocos2d-x项目呢?先来看看Cocos2d-x3.2的目录吧这就是Cocos2d-x3.2的目录。输入cocosnew项目名–p包名–lcpp–d路径回车就创建成功了例如:成功后,找到这个项目打开proj.win32目录下的Hello.slnF5成功了。

  8. 利用cocos2dx 3.2开发消灭星星十为游戏添加音效项目源码分享

    一个游戏,声音也是非常的重要,其实cocos2dx里面的简单音效引擎的使用是非常简单的。我这里只不过是用一个类对所有的音效进行管理罢了。Audio.hAudio.cpp好了,本系列教程到此结束,第一次写教程如有不对请见谅或指教,谢谢大家。最后附上整个项目的源代码点击打开链接

  9. 03 Helloworld

    程序都有一个入口点,在C++就是main函数了,打开main.cpp,代码如下:123456789101112131415161718#include"main.h"#include"AppDelegate.h"#include"cocos2d.h"USING_NS_CC;intAPIENTRY_tWinMain{UNREFERENCED_ParaMETER;UNREFERENCED_ParaMETER;//createtheapplicationinstanceAppDelegateapp;return

  10. MenuItemImage*图标菜单创建注意事项

    学习cocos2dx,看的是cocos2d-x3.x手游开发实例详解,这本书错误一大把,本着探索求知勇于发现错误改正错误的精神,我跟着书上的例子一起调试,当学习到场景切换这个小节的时候,出了个错误,卡了我好几个小时。

返回
顶部