发个帖作为今天折腾了n久的总结吧,已经能绑定非cocos2d的类了
但是目前我仍然没法绑定cocos2d相关的类,也就是说不能有cocos2d.h这样的文件引用,
我折腾了genbindings.py了很久,仍然是里面的路径或者是什么不对,还望大神指点
----------------首先要安装3个破玩意儿----------
python一般都安装了吧,然后有人包括我在内,看了网上的教程后都是直接下PyYAML和Cheetah安装的,
好像已经装上去了但是是有问题的- -大坑!!!请用下面的方式安装
打开tools/tojs/README.mdown 按照里面的说明逐次运行
sudo easy_install pip
sudo pip install PyYAML
sudo pip install Cheetah
欧耶pip真是太好了,这样才能正确安装
----------------然后看看test的类--------------
tools/bindings-generator/test
到这里的时候,大部分人包括我都是直接运行test.sh,如果上面配置正确的话好像就成功了
慢着!!!!!
这里有个东西又是大部分教程没说的,test.ini里面的 target_namespace = ts 请必须填一个东西,不然生成的类是错的!!
//默认情况下cpp文件输出,注意这里明显是错的,擦蛋你的ns是怎么来的 void register_all_autogentestbindings(JSContext* cx, JS::HandleObject obj) { js_register_autogentestbindings_SimpleNativeClass(cx, ns); } //填了ts之后,这里变成,正确的 void register_all_autogentestbindings(JSContext* cx, JS::HandleObject obj) { // Get the ns JS::RootedObject ns(cx); get_or_create_js_obj(cx, obj, "ts", &ns); js_register_autogentestbindings_SimpleNativeClass(cx, ns); } ``` 还有一个小问题,打开simple_class,后面xcode会说错误的,注释掉这里吧void SimpleNativeClass::setAnotherMoreComplexField(const char *str) { //if (m_anotherMoreComplexField) { // free(m_anotherMoreComplexField); //} //size_t len = strlen(str); //m_anotherMoreComplexField = (char *)malloc(len); //memcpy(m_anotherMoreComplexField, str, len); } ``` 然后我们愉快的运行./test.sh ,将生成的js文件放到scipt中,将simple_class.h,simple_class.cpp,autogentestbindings.hpp,autogentestbindings.cpp放到Class文件夹中 在xcode中添加文件,然后在js_module_register.h中加入 simple_class.h和autogentestbindings.hpp这两个头文件,在下面位置加 sc->addRegisterCallback(register_all_autogentestbindings); 这个时候,请用xcode编译一个mac的模拟器,这个模拟器请不要在cocoside里面构建,不知为何有时可以有时不可以的会弹出 CocosJSBindTest-desktop Unable to load nib file: MainMenu, exiting 这个错误,根本启动不了,坑!!! xcode构建完模拟器之后可以在runtime或者simulator里面看到它,然后在cocoside里面把模拟器设置成它 然后在Helloworld中添加 var myClass = new ts.SimpleNativeClass(); var myStr = myClass.returnsACString(); cc.log("customClass's msg is : " + myStr); var label2 = new cc.LabelTTF(myStr,"",20.0); label2.setPosition(cc.winSize.width/2,cc.winSize.height/2); this.addChild(label2,2); 就可以看到有label的字了,慢着,这个cc.log是没有输出的,因为默认是release的,请设为debug才有log输出 ------------------跑在安卓上-------------------- 要跑在安卓上的话还需在frameworks/runtime-src/proj.android/jni/Android.mk里面添加上simple_class和autogentestbindings的路径 LOCAL_SRC_FILES := \ ../../Classes/AppDelegate.cpp \ ../../Classes/ide-support/SimpleConfigParser.cpp \ ../../Classes/ide-support/RuntimeJsImpl.cpp \ ../../Classes/simple_class.cpp \ ../../Classes/autogentestbindings.cpp \ hellojavascript/main.cpp 编译,搞定 -----------下面是我目前还搞不定的------ ---------------------运行genbindings.py的输出,望大神指点------------- File "/Users/ZY/Documents/otherManGame/CocosJSBindTest/tools/bindings-generator/clang/cindex.py", line 2113, in parse self) File "/Users/ZY/Documents/otherManGame/CocosJSBindTest/tools/bindings-generator/clang/cindex.py", line 2225, in from_source raise TranslationUnitLoadError("Error parsing translation unit.") TranslationUnitLoadError: Error parsing translation unit. ------------------------------------- Generating javascript bindings fails. -------------------------------------