frameworks3.7版本的js自动绑定,目前只绑定到非cocos2d的类

发个帖作为今天折腾了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.
-------------------------------------

*** Found errors - can not continue
Traceback (most recent call last):
File “/Users/tw-c-057/client_ol/tools/bindings-generator/generator.py”, line 1418, in
main()
File “/Users/tw-c-057/client_ol/tools/bindings-generator/generator.py”, line 1414, in main
generator.generate_code()
File “/Users/tw-c-057/client_ol/tools/bindings-generator/generator.py”, line 1087, in generate_code
self._parse_headers()
File “/Users/tw-c-057/client_ol/tools/bindings-generator/generator.py”, line 1123, in _parse_headers
raise Exception(“Fatal error in parsing headers”)
Exception: Fatal error in parsing headers

Generating javascript bindings fails.
-------------------------------------望大神指点

问题解决了么?

如果挖坟请无视
TranslationUnitLoadError: Error parsing translation unit.
我也报了这个错,我遇到的情况是在ini文件中有输入的文件路径错误,具体情况是一个文件名应该是src,我写成了scr所以一直检查不出来。
查了很多资料,很多类似的问题,最后不了了之,我觉得出现这个问题的人情况可能类似,有的是win下面文件中多了个空格,有的是文件修改问题。因为是这个小失误,所以很多人没有再去留言,才导致后来的人依然卡好久。