本人cocos新手,刚用没多长时间,想在cocos的js脚本里面扩展个类似setInterval功能,但是不知道怎么写,或者怎么查相关的资料?
看了官方的sample,没找到我想要的功能. mozilla官网也只是找到了相关函数的参数说明,没找到sample.
麻烦各位高手了,谢谢!
main.js代码
setInterval(function(){
},1000);
c++代码
主函数{
ScriptingCore* sc = ScriptingCore::getInstance();
JSContext* cx = sc->getGlobalContext();
sc->addRegisterCallback(register_Global_bindings);
sc->start();
sc->runScript(“main.js”);
}
void register_Global_bindings(JSContext *cx, JS::HandleObject global)
{
JS::RootedObject ccobj(cx);
get_or_create_js_obj(cx, global, “js”, &ccobj);
js_register_Global_setInterval(cx, global);
}
JS::CallArgs g_call; // 这里不知这样写对不对,测试时候只能第一次成功回调
JS::CallArgs g_args;
static void setInterval_CallBack(void* param)
{
JSB_AUTOCOMPARTMENT_WITH_GLOBAL_OBJCET;
JSContext* cx = ScriptingCore::getInstance()->getGlobalContext();
JS::RootedValue outval(cx);
JS_CallFunctionValue(cx, JS::NullPtr(), g_call.get(0), g_args, &outval); // 第一次正常回掉到js代码中,第二次就失败了
}
static bool jsb_setInterval_constructor(JSContext *cx, uint32_t argc, jsval *vp)
{
g_call = JS::CallArgsFromVp(1, &vp); // 我觉得问题主要是在这里,vp应该是个临时变量导致的,但是实在是不知道怎么写,能够让这个临时变量的值保存下来
g_args = JS::CallArgsFromVp(argc-2, &vp);
// 这里创建了一个cocos的定时器,定时回掉到上面setInterval_CallBack中
return;
}