【步兵 cocos-js】js绑定 && c++调用Js

时间:2021-12-10 18:03:29

【步兵 cocos-js】js绑定 && c++调用Js by EOS.

闲暇之于,把之前写过的东西,拿出来福利一下大家=、=


首先 js绑定

其实 cocos源码路径\tools\tojs\README.mdown 都有写,但是我发现好多人都不知道,
然后去各种百度,然后百度出不知道什么鬼东西=。=

cocos就是这么不讲情面,东西放在那,就是不告诉你他是干什么的。
cocos认为所有人都应该是老手,如果你是新手那么请哭吧。

我用的是最新版本的3.10,老版本的就看对应路径下的文件吧。

//README.mdown
How to Use bindings-generator
==================


On Windows:
------------


* Make sure that you have installed `android-ndk-r10c` or later.
* Download python2.7.3 (32bit) from (http://www.python.org/ftp/python/2.7.3/python-2.7.3.msi).
* Add the installed path of python (e.g. C:\Python27) to windows environment variable named 'PATH'.
* Download pyyaml from http://pyyaml.org/download/pyyaml/PyYAML-3.11.win32-py2.7.exe and install it.
* Download pyCheetah from https://raw.github.com/dumganhar/cocos2d-x/download/downloads/Cheetah.zip, unzip it to "C:\Python27\Lib\site-packages"
* Set environment variables (`NDK_ROOT`) and `PYTHON_BIN`
* Go to "cocos2d-x/tools/tojs" folder, and run "genbindings.py". The generated codes will be under "cocos\scripting\auto-generated\js-bindings".

///////以下省略

我这里面工具都下载好了,有的资源不好下载太慢,还有到绑定成功的使用说明:
》》》云盘链接 === 提取密码:gvw4《《《
还是那句话,不同版本的还是要去看 README.mdown.

这里是官方的绑定示例:http://www.cocos2d-x.org/wiki/Binding_Custom_Class_To_Js_Runtime
英文的耶~棒棒的(吐血)。其实和luabinding一样的流程,这一点还是挺贴心的。


c++调用js

当初弄这块也搞了半天也挺郁闷的,为什么就没教程类= =#
源码直接贴出来安利了~

//ScriptingCore.h 中添加
//JS::HandleObject getGlobalHandle() { return _global.ref(); }

void CallJSFuncName(string jsname, string jsmethod, int count, ...) {
ScriptingCore* sc = ScriptingCore::getInstance();
JSContext* cx = sc->getGlobalContext();
JS::RootedValue nsval(cx);

if (JS_GetProperty(cx, sc->getGlobalHandle(), jsname.c_str(), &nsval)) {
int argc = count;
jsval* argv = new jsval[argc];;

va_list insvalist;
va_start(insvalist, count);
for (int i = 0; i < count; ++i)
{
argv[i] = std_string_to_jsval(sc->getGlobalContext(), std::string(va_arg(insvalist, const char *)));
}
va_end(insvalist);

sc->executeFunctionWithOwner(nsval, jsmethod.c_str(), argc, argv);
delete[] argv;
}
}

//使用
//CallJSFuncName(对象名, 方法名, 参数个数, ...);
CallJSFuncName("Socket", "onMessage", 1, info.c_str());

//js部分
//var Socket = {};
//Socket.onMessage = function (data) {
// print("jsNet onMessage");
//};

over!!!

See Again~
之前
真爱无价,欢迎打赏~
【步兵 cocos-js】js绑定 && c++调用Js