首页 > 代码库 > cocos2d-html5 javascript 通过C++绑定,调用java方法
cocos2d-html5 javascript 通过C++绑定,调用java方法
1、java中的写法
/* * XConnectPlugin.java * * Created on: 2014年4月30日 * Author: lswdonald9@gmail.com */ package org.cocos2dx.commonSDK; import android.util.Log; public class XConnectPlugin { public static void start(String str) { Log.d("mylog ", "str>>" + str); } }
2、C++中的写法
头文件(XInterface.h)声明方法:
/* * XInterface.h * * Created on: 2014年4月30日 * Author: lswdonald9@gmail.com */ #ifndef XINTERFACE_H_ #define XINTERFACE_H_ #include "string" class XInterface { public: static void start(const char* ct); }; #endif /* XINTERFACE_H_ */
XInterface.cpp中写法:
/* * XInterface.cpp * * Created on: 2014年4月30日 * Author: lswdonald9@gmail.com */ #if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) #include "XInterface.h" #include "platform/android/jni/JniHelper.h" #include <jni.h> #include <android/log.h> #include "ScriptingCore.h" XInterface::XInterface() { } XInterface::~XInterface() { } const char* XJavaClassName = "org/cocos2dx/commonSDK/XConnectPlugin"; void XInterface::start(const char* cLevel) { JniMethodInfo t; if (JniHelper::getStaticMethodInfo(t, XJavaClassName, "start", "(Ljava/lang/String;)V")) { if (cLevel) { jstring jLevel = t.env->NewStringUTF(cLevel); t.env->CallStaticVoidMethod(t.classID, t.methodID, jLevel); t.env->DeleteLocalRef(jLevel); } t.env->DeleteLocalRef(t.classID); } } #endif
以上部分是C++调用到java的方法,start(string)。
3、以下部分是,在SpritMonkey中注冊C++方法到javascript中
js_bindings_X.cpp
/* * jsbindingsX.cpp * * Created on: 2014年4月30日 * Author: lswdonald9@gmail.com */ #include "ScriptingCore.h" #include "XInterface.h" JSBool JSB_X_start(JSContext *cx, uint32_t argc, jsval *vp){ std::string str; if(argc == 1) { jsval *argv = JS_ARGV(cx, vp); jsval_to_std_string(cx, argv[0], &str); XInterface::start(str.c_str()); } return JS_TRUE; } void register_X_js(JSContext* cx, JSObject* global){ jsval nsval; JSObject *XJsbObject; JS_GetProperty(cx, global, "XJsb", &nsval); if (nsval == JSVAL_VOID) { XJsbObject = JS_NewObject(cx, NULL, NULL, NULL); nsval = OBJECT_TO_JSVAL(XJsbObject); JS_SetProperty(cx, global, "XJsb", &nsval); } else JS_ValueToObject(cx, nsval, &XJsbObject); JS_DefineFunction(cx, XJsbObject, "start", JSB_X_start, 1, JSPROP_READONLY | JSPROP_PERMANENT); }
然后在javascript中,这样声明:
var XJsb = XJsb || { start : function () { } };注意。这里的XJsb跟c++ 中的register_x_js 保持一致.
然后在,须要调用的地方。触发:
XJsb.start("from javaScript");须要注意,在AppDelegate.cpp中。增加
extern void register_X_js(JSContext* cx, JSObject* global);和
ScriptingCore* sc = ScriptingCore::getInstance(); sc->addRegisterCallback(register_X_js);在Android.mk中的LOCAL_SRC_FILES加入:
LOCAL_SRC_FILES := ../../Classes/XInterface.cpp ../../Classes/js_bindings_X.cpp
最后的结果就出来了:from javaScript
cocos2d-html5 javascript 通过C++绑定,调用java方法
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。