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

最新文章

  1. js Math 对象的方法
  2. 【C】 04 - 表达式和语句
  3. SQL 之witn as语法
  4. JavaScript基础12——js的方法重载
  5. android SharedPreferences
  6. java路径中的空格问题(转)
  7. 常用的MAVEN公共私服
  8. yii2 验证码的使用
  9. Assigning retained object to unsafe property;object will be released after assignment
  10. GDI+(Graphics Device Interface)例子
  11. html5储存篇(二)
  12. oracle 事务 与 提交
  13. 下载文件 utils
  14. Crontab定时执行Oracle存储过程
  15. CocosCreator的Sprite的更换
  16. 模型层model layer
  17. MongoDB 及 Mysql 背后的 B/B+树
  18. xcode6 添加.pch文件
  19. css第一篇:元素选择器
  20. centos_7.1.1503_src_4

热门文章

  1. 通过OpenSSL解析X509证书基本项
  2. LAMP+YII框架配置中遇到的问题
  3. php课程 12-40 抽象类的作用是什么
  4. 初步使用RecyclerView实现瀑布流
  5. 1.25 Python知识进阶 - 封装
  6. BZOJ3282: Tree (LCT模板)
  7. CentOS不能进入登录界面
  8. 【例题 7-6 UVA - 140】Bandwidth
  9. 洛谷—— P1434 滑雪
  10. maven插件介绍之tomcat7-maven-plugin