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

【步兵 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~
之前
真爱无价,欢迎打赏~
赞赏码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值