cocos2d-js 自动绑定代码

cocos2d-js 自动绑定代码,第1张

概述之前在接入sdk 的时候,因为sdk那边分了 android 和 ios 写两次吧,改的时候也难得改,所以直接写在了c++层 ,这样大家都方便,可是自己写的代码,如何在js调用呢,后面发现,cocos 是提供了这方面的东西的,我们只需要做一个小小的改动就可以直接使用了,直接进入正题: 关于接的sdk,我就不贴出来了,sdk ,你懂得 恶心的很 这里纯粹做个例子 js new 工程我就不说了 自己百

之前在接入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(){

"测试绑定代码---- 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_rootoutput_dir = '%s/cocos/scripting/Js-bindings/auto' % project_rootcmd_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 fileconfig = 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_rootoutput_dir = '%s/Js-bindings_test/auto' % runtime_srccmd_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 自动绑定代码全部内容,希望文章能够帮你解决cocos2d-js 自动绑定代码所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1085143.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存