【cocos2d-x从c++到js】JS与C++的交互一——JS代码调用C++代码
【cocos2d-x从c++到js】JS与C++的交互1——JS代码调用C++代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
//在AppDelegate::applicationDidFinishLaunching函数中
ScriptingCore*
sc = ScriptingCore::getInstance();
sc->addRegisterCallback(register_all_cocos2dx);
sc->addRegisterCallback(register_all_cocos2dx_extension);
sc->addRegisterCallback(register_cocos2dx_js_extensions);
sc->addRegisterCallback(register_all_cocos2dx_extension_manual);
sc->addRegisterCallback(jsb_register_chipmunk);
sc->addRegisterCallback(JSB_register_opengl);
sc->addRegisterCallback(jsb_register_system);
sc->addRegisterCallback(MinXmlHttpRequest::_js_register);
sc->addRegisterCallback(register_jsb_websocket);
sc->addRegisterCallback(register_all_cocos2dx_builder);
sc->addRegisterCallback(register_CCBuilderReader);
sc->addRegisterCallback(register_all_cocos2dx_gui);
sc->addRegisterCallback(register_all_cocos2dx_gui_manual);
sc->addRegisterCallback(register_all_cocos2dx_studio);
sc->addRegisterCallback(register_all_cocos2dx_studio_manual);
sc->addRegisterCallback(register_all_cocos2dx_spine);
|
1
2
|
var node
= cc.Node.create();
node.setVisible( false );
|
1
2
|
auto node
= CCNode::create();
node->setVisible( false );
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
JSBool
js_cocos2dx_Node_create(JSContext *cx, uint32_t argc, jsval *vp)
{
if (argc
== 0) {
cocos2d::Node*
ret = cocos2d::Node::create();
jsval
jsret = JSVAL_NULL;
do {
if (ret)
{
js_proxy_t
*proxy = js_get_or_create_proxy<cocos2d::Node>(cx, (cocos2d::Node*)ret);
jsret
= OBJECT_TO_JSVAL(proxy->obj);
} else {
jsret
= JSVAL_NULL;
}
} while (0);
JS_SET_RVAL(cx,
vp, jsret);
return JS_TRUE;
}
JS_ReportError(cx, "js_cocos2dx_Node_create
: wrong number of arguments" );
return JS_FALSE;
}
|
1
|
cocos2d::Node*
ret = cocos2d::Node::create();
|
1
|
jsval
jsret = JSVAL_NULL;
|
1
2
|
js_proxy_t
*proxy = js_get_or_create_proxy<cocos2d::Node>(cx, (cocos2d::Node*)ret);
jsret
= OBJECT_TO_JSVAL(proxy->obj);
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
JSBool
js_cocos2dx_Node_setVisible(JSContext *cx, uint32_t argc, jsval *vp)
{
jsval
*argv = JS_ARGV(cx, vp);
JSBool
ok = JS_TRUE;
JSObject
*obj = JS_THIS_OBJECT(cx, vp);
js_proxy_t
*proxy = jsb_get_js_proxy(obj);
cocos2d::Node*
cobj = (cocos2d::Node *)(proxy ? proxy->ptr : NULL);
JSB_PRECONDITION2(
cobj, cx, JS_FALSE, "js_cocos2dx_Node_setVisible
: Invalid Native Object" );
if (argc
== 1 )
{
JSBool
arg0;
ok
&= JS_ValueToBoolean(cx, argv[ 0 ],
&arg0);
JSB_PRECONDITION2(ok,
cx, JS_FALSE, "js_cocos2dx_Node_setVisible
: Error processing arguments" );
cobj->setVisible(arg0);
JS_SET_RVAL(cx,
vp, JSVAL_VOID);
return JS_TRUE;
}
JS_ReportError(cx, "js_cocos2dx_Node_setVisible
: wrong number of arguments: %d, was expecting %d" ,
argc, 1 );
return JS_FALSE;
}
|
1
2
3
4
5
6
|
jsval
*argv = JS_ARGV(cx, vp);
JSBool
ok = JS_TRUE;
JSObject
*obj = JS_THIS_OBJECT(cx, vp);
js_proxy_t
*proxy = jsb_get_js_proxy(obj);
cocos2d::Node*
cobj = (cocos2d::Node *)(proxy ? proxy->ptr : NULL);
JSB_PRECONDITION2(
cobj, cx, JS_FALSE, "js_cocos2dx_Node_setVisible
: Invalid Native Object" );
|
1
2
3
4
5
6
7
8
|
if (argc
== 1) {
JSBool
arg0;
ok
&= JS_ValueToBoolean(cx, argv[0], &arg0);
JSB_PRECONDITION2(ok,
cx, JS_FALSE, "js_cocos2dx_Node_setVisible
: Error processing arguments" );
cobj->setVisible(arg0);
JS_SET_RVAL(cx,
vp, JSVAL_VOID);
return JS_TRUE;
}
|