Mac下cocos3.15如何将c++绑定至javascript(自动生成)详解(下)
以下解说在 test目录下进行
1.进入项目目录 /Users/*******/cocos2d-x-3.15.1/tools/bindings-generator/test
2.修改test.ini文件修改部分做着色处理(详细如下)
1 [SpriteWithHue]
2 name = SpriteWithHue
3 prefix = autoSpriteWithHuebindings
4 classes = SpriteWithHue
5
6 android_headers = -I%(androidndkdir)s/platforms/android-14/arch-arm/usr/include -I%(androidndkdir)s/sources/cxx-stl/gnu-libstdc++/4.8/libs/armeabi-v7a/include -I%(androidndkdir)s/sources/cxx-stl/gnu-libstdc++/4.8/include -I%(androidndkdir)s/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a/include -I%(androidndkdir)s/sources/cxx-stl/gnu-libstdc++/4.9/include
7 android_flags = -D_SIZE_T_DEFINED_
8 cocos_flags = -DANDROID
9 clang_headers = -I%(clangllvmdir)s/lib/clang/%(clang_version)s/include
10 clang_flags = -nostdinc -x c++ -std=c++11 -U __SSE__
11
12 cocos_headers = -I%(cocosdir)s/cocos -I%(cocosdir)s/cocos/platform/android -I%(cocosdir)s/external
13
14 simple_test_headers = -I%(cocosdir)s/cocos -I%(cocosdir)s/cocos/gameJsb
15
16 extra_arguments = %(android_headers)s %(clang_headers)s %(android_flags)s %(clang_flags)s %(cocos_headers)s %(cocos_flags)s %(simple_test_headers)s %(extra_flags)s
17
18 headers = %(cocosdir)s/cocos/gameJsb/CCSpriteWithHue.h
19
20 target_namespace =
21 remove_prefix =
22 skip =
23 base_objects =
24 abstract_classes =
25 classes_have_type_info = no
26 rename =
27 rename_functions =
28 rename_classes =
29 # classes for which there will be no "parent" lookup
30 classes_have_no_parents =
31
32 # base classes which will be skipped when their sub-classes found them.
33 base_classes_to_skip =
34
35 # Determining whether to use script object(js object) to control the lifecycle of native(cpp) object or the other way around. Supported values are 'yes' or 'no'.
36 script_control_cpp = yes
.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 :跳过你所不需要绑定的方法和类,于是就不生成。
如果关于.ini文件还有其他需求 :
请自行参考例子:cocos2dx引擎根目录/tools/bindings-generator/test/test.ini
cocos2dx引擎根目录/tools/tojs/cocos2dx_extension.ini
cocos2dx引擎根目录/tools/tojs/cocos2dx.ini
(一般来说头文件找不到的错误加一下 cocos_heards 就解决了)
以上是对应部分的说明。
接下来 我说明以下我对上述文件修改的某些部分做一些简单说明
因为在上篇文章中我们在CCSpriteWithHue 调用了 cocos2d.h的头文件
所以我加了头文件目录
cocos_headers = -I%(cocosdir)s/cocos -I%(cocosdir)s/cocos/platform/android -I%(cocosdir)s/external
以及
cocos_flags = -DANDROID
让脚本知道文件路径和平台文件区分
3.修改test.py文件
(这里有些小坑,请仔细查看你们的设置的 NDK目录里面是否有)

这些目录没有请更具自己目录下有的版本进行修改(我用的版本是android-ndk-r9b)
废话不多说 来看一下我们需要修改的地方

此处不做说明
4. 进入test.py目录
/Users/******/cocos2d-x-3.15.1/tools/bindings-generator/test
执行 ./test.py 命令(如果提示没有权限使用命令 chmod a+x ./test.py 修改后执行)
会看到
Generating javascript bindings succeeds的提示
5.进入以下目录
cocos2d-x-3.15.1/tools/bindings-generator/test/simple_test_bindings
可以看到文件已经自动生成

6.加入新项目中使用
进入到项目 Desktop/JsGameDemo/frameworks/cocos2d-x/cocos/scripting/js-bindings/auto 目录中 把对应cpp和hpp放到auto目录下方、把js文件放入api文件中
自己的C++代码则自己选一个地方放我自己在cocos目录下
至此自动生成jsb文件和使用都已经完成,以下附上使用代码
在classes中调用
sc->addRegisterCallback(register_all_autoSpriteWithHuebindings);
7.js中调用SpriteWithHue接口
for( var i = 0 ; i < 10 ; i++)
{
var alien = SpriteWithHue.create(res.playerStand);
alien.setAnchorPoint(0,0.5);
alien.setPosition(cc.p((10+130*i), 400));
alien.setHue(i);
this.addChild(alien,20);
}
运行后会发现效果如下一张图颜色可以变化成很多种

至此解说完毕。顺便吐槽下博客园,写个博客崩溃5次以上。。。。

浙公网安备 33010602011771号