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次以上。。。。

 

 

posted @ 2017-07-13 11:24  小鱼2015  阅读(250)  评论(0)    收藏  举报