cocos2dx 自己主动绑定js
Posted wzzkaifa
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了cocos2dx 自己主动绑定js相关的知识,希望对你有一定的参考价值。
依照教程把全部资源下载好后.......
找到cocos2dx project下的tools/bindings-generator/test
发现里面有test.sh , test.ini , 去掉simple后缀后的user.cfg , 与userconf.ini ; 把这四个文件里的路径都改为那些资源的路径
"test.sh" # options usage(){ cat << EOF usage: $0 [options] Test the C++ <-> JS bindings generator OPTIONS: -h this help Dependencies : PYTHON_BIN CLANG_ROOT NDK_ROOT Define this to run from a different directory CXX_GENERATOR_ROOT EOF } while getopts "dvh" OPTION; do case "$OPTION" in d) debug=1 ;; v) verbose=1 ;; h) usage exit 0 ;; esac done # exit this script if any commmand fails set -e # find current dir DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" # read user.cfg if it exists and is readable _CFG_FILE=$(dirname "$0")"/user.cfg" if [ -e "$_CFG_FILE" ] then [ -r "$_CFG_FILE" ] || die "Fatal Error: $_CFG_FILE exists but is unreadable" . "$_CFG_FILE" fi # paths if [ -z "${NDK_ROOT+aaa}" ]; then # ... if NDK_ROOT is not set, use "$HOME/bin/android-ndk" NDK_ROOT="/Users/tudu/Downloads/android-ndk-r9c" fi if [ -z "${CLANG_ROOT+aaa}" ]; then # ... if CLANG_ROOT is not set, use "$HOME/bin/clang+llvm-3.1" CLANG_ROOT="/Users/tudu/Downloads/clang+llvm-3.1-x86_64-apple-darwin11" fi if [ -z "${PYTHON_BIN+aaa}" ]; then # ... if PYTHON_BIN is not set, use "/usr/bin/python2.7" PYTHON_BIN="/usr/bin/python2.7" fi # paths with defaults hardcoded to relative paths if [ -z "${CXX_GENERATOR_ROOT+aaa}" ]; then CXX_GENERATOR_ROOT="$DIR/.." fi echo "CLANG_ROOT: $CLANG_ROOT" echo "NDK_ROOT: $NDK_ROOT" echo "CXX_GENERATOR_ROOT: $CXX_GENERATOR_ROOT" echo "PYTHON_BIN: $PYTHON_BIN" # Generate bindings for simpletest using Android‘s system headers echo "Generating bindings for simpletest with Android headers..." set -x LD_LIBRARY_PATH=${CLANG_ROOT}/lib $PYTHON_BIN ${CXX_GENERATOR_ROOT}/generator.py ${CXX_GENERATOR_ROOT}/test/test.ini -s testandroid -o ./simple_test_bindings
"test.ini"
<pre name="code" class="plain">[testandroid] name = simple_test prefix = ttttttt classes = testbang cocosdir = /Users/tuyou/Downloads/cocos2d-x-2.2.3 # 从 cocos2dx.ini 等搬过来的 cocos_headers = -I%(cocosdir)s/cocos2dx/include -I%(cocosdir)s/cocos2dx/platform -I%(cocosdir)s/cocos2dx/platform/android -I%(cocosdir)s/cocos2dx -I%(cocosdir)s/cocos2dx/kazmath/include cocos_flags = -DANDROID -DCOCOS2D_javascript extra_arguments = %(cocos_headers)s %(cocos_flags)s -D_SIZE_T_DEFINED_ -nostdinc -nostdinc++ -I%(androidndkdir)s/platforms/android-14/arch-arm/usr/include -I%(androidndkdir)s/sources/cxx-stl/gnu-libstdc++/4.6/libs/armeabi-v7a/include -I%(androidndkdir)s/sources/cxx-stl/gnu-libstdc++/4.6/include -I%(clangllvmdir)s/lib/clang/3.1/include -I%(cxxgeneratordir)s/test/simple_test -x c++ #headers = %(cxxgeneratordir)s/test/simple_test/test.h headers = /Users/tuyou/Downloads/cocos2d-x-2.2.3/tools/bindings-generator/test/simple_test/test.h target_namespace = remove_prefix = skip = base_objects = abstract_classes = classes_have_type_info = no rename = rename_functions = rename_classes = # classes for which there will be no "parent" lookup classes_have_no_parents = # base classes which will be skipped when their sub-classes found them. base_classes_to_skip = # 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‘. script_control_cpp = yes
</pre><p></p><pre>
"user.cfg" PYTHON_BIN=/usr/bin/python2.7
"userconf.ini" [DEFAULT] androidndkdir=/Users/tudu/Downloads/android-ndk-r9c clangllvmdir=/Users/tudu/Downloads/clang+llvm-3.1-x86_64-apple-darwin11 cxxgeneratordir=/Users/tudu/Downloads/cocos2d-x-2.2.3/tools/bindings-generator/test
然后执行test.sh
OK了
关于终端打印出的错误提示 , 以下这些warning貌似没影响:
/Library/Python/2.7/site-packages/Cheetah-2.4.4-py2.7.egg/Cheetah/Compiler.py:1509: UserWarning: You don‘t have the C version of NameMapper installed! I‘m disabling Cheetah‘s useStackFrames option as it is painfully slow with the Python version of NameMapper. You should get a copy of Cheetah with the compiled C version of NameMapper. "\nYou don‘t have the C version of NameMapper installed! " ==== Errors in parsing headers: 1. <severity = Warning, location = <SourceLocation file None, line 0, column 0>, details = "argument unused during compilation: ‘-nostdinc++‘"> ====
假设有severity = error就要检查一番了 , 之前的error一般都能够通过改动上面那些路径而解决
自己主动绑定的问题 :
1 . 不能绑定继承的第二个类 , 一个类继承多个类的时候 , 仅仅有被继承的第一个类被绑定了 ,原因是 "JS_InitClass"这个函数的形參列表中仅仅能接受一个父类.以下是形參列表:
JS_InitClass(JSContext *cx, JSObject *obj, JSObject *parent_proto, JSClass *clasp, JSNative constructor, unsigned nargs, JSPropertySpec *ps, JSFunctionSpec *fs, JSPropertySpec *static_ps, JSFunctionSpec *static_fs);
以上是关于cocos2dx 自己主动绑定js的主要内容,如果未能解决你的问题,请参考以下文章