1:C++中调用js方法:

问题:ios中当用户通过home键将游戏转入后台时,调用js中的暂停游戏方法;

AppDelegate::applicationDidEnterBackground() 和 applicationDidEnterForeground()方法是C++方式处理程序进入后台与前台的代码,在此处添加C++调用js的代码:

//version 2.1.3

ScriptingCore* sc = ScriptingCore::getInstance();

jsval nsval;

JS_GetProperty(sc->getGlobalContext(), sc->getGlobalObject(), "类名", &nsval);

if(nsval != JSVAL_VOID)

{

sc->executeFunctionWithOwner(nsval,"方法名");

}

js中(假设类名plus,方法名:onDidEnterBackground):

var plus = {};

plus.onDidEnterBackground(){...//code here};

备注:

使用executeFunctionWithOwner的关键是获取Owner,JS_GetProperty是spideMonkey提供的一种获取属性(也是对象)的方式;

=========================================================

2:js中调用C++方法:

定义C++方法,然后将编写绑定, 以在TableView下增加一个testjs方法为例, 我们在jsb_cocos2dx_extension_manual.cpp中添加代码:

//add manual function to js

static JSBool js_cocos2dx_CCTableView_testFuncTojs(JSContext* cx, uint32_t argc, jsval *vp)

{

if(argc > 0)

{

JSString *string = NULL;

JS_ConvertArguments(cx, argc, JS_ARGV(cx, vp), "S", &string);

if(string)

{

JSStringWrapper wrapper(string);

CCLOG("jsb binding say: %s",wrapper.get().c_str());

}

}

return JS_TRUE;

}

然后在register_all_cocos2dx_extenstion_manual(JSContext* cx, JSObject* global)末尾行添加一个定义:

JS_DefineFunction(cx, tmpObj, "testFuncTojs", js_cocos2dx_CCTableView_testFuncTojs, 1, JSPROP_READONLY|JSPROP_PERMANENT);

最后在js文件中即可调用:

cc.TableView.testFuncTojs("hello , jsb!");

=========================================================

3:C++调用obj-C

定义oc的.h和.m文件,定义方法: testLog  和 testMessageBox

定义c++的.h文件

定义c++的cpp文件,将后缀名改为.mm

.mm文件混编写法如下:

#include "supportOC.h"

#include "invokeOC.h"

void invokeOC::myinit(){

[supportOC testLog];

[supportOC testMessageBox:@"cocos2d-x调用oc" title:@"hello"];

}

之后在主程序中引入c++的.h文件后即可使用 invokeOC::myinit()方法;

=========================================================

4:C++和 Java的互调

制作安卓版本时,我们需要使用C++调用java的函数,这个通过jni实现,实例:

在头部引入文件:

#include

#include "platform/android/jniHelper.h"

然后定义C++方法:

void callJavaFunc()

{

cocos2d::JniMethodInfo t;

if(cocos2d::JniHelper::getStaticMethodInfo(t, "org/cocos2dx/项目名称/类名", "java的方法","()V"))

{

t.env->CallStaticVoidMethod(t.classID, t.methodID);

}

}

在c++中调用callJavaFunc()方法或者绑定给js调用,然后使用NDK编译后在ADT中运行,即可调到java的方法;

java调用C++的方法:

首先在java中定义一个public static native void funcname(); 然后运行时会调用C++中一定命名规则的funcname函数;命名如下:

extern "C"{void Java_org_cocos2dx_项目名_类名_funcname(JNIEnv *env, jobject thiz)

{

CCLog("jni : java call C++");

}

}

注意这里一定要extern "C" , 不然java无法找到这个native方法;

=========================================================

4:关于 2.1.3 Plugin-X

暂时未有空实现,附两篇好文:

http://go3k.org/blog/2013/07/08/cocos2dx-pluginx-1/

http://go3k.org/blog/2013/07/08/cocos2dx-pluginx-2/

=========================================================

5:参考:

2.1.0版本手动绑定TableView过程:https://github.com/cocos2d/cocos2d-x/pull/2015/files

调整C++源码;

scripting/javascript/bindings/cocos2d_specifices.cpp中添加绑定代码;

scripting/javascript/bindings/js/jsb_cocos2d.js中添加常量与扩展类;

tools/tojs/cocos2dx.ini 添加脚本生成的规则;

jsb调用java_cocos2dx-jsb 跨语言调用及第三方集成 - 过程记录相关推荐

  1. 使用thrift进行跨语言调用(php c# java)

    1:前言 实际上本文说的是跨进程的异构语言调用,举个简单的例子就是利用PHP写的代码去调C#或是java写的服务端.其实除了本文提供的办法还有其他办法,例如http+xml(json)等等都能做到. ...

  2. Java如何跨语言调用Python/R训练的模型

    在 如何使用sklearn进行在线实时预测(构建真实世界中可用的模型) 这篇文章中,我们使用 sklearn + flask 构建了一个实时预测的模型应用.无论是 sklearn 还是 flask,都 ...

  3. 跨语言调用Hangfire定时作业服务

    背景 Hangfire允许您以非常简单但可靠的方式执行后台定时任务的工作.内置对任务的可视化操作.非常方便. 但令人遗憾的是普遍都是业务代码和hagnfire服务本身聚合在一个程序中运行,极大的限制了 ...

  4. Dubbo 跨语言调用神兽:dubbo-go-pixiu

    简介:Pixiu 是基于 Dubbogo 的云原生.高性能.可扩展的微服务 API 网关.作为一款网关产品,Pixiu 帮助用户轻松创建.发布.维护.监控和保护任意规模的 API ,接受和处理成千上万 ...

  5. js php调用webservice,js跨域调用WebService的使用方法

    这次给大家带来js跨域调用WebService的使用方法,js跨域调用WebService的注意事项有哪些,下面就是实战案例,一起来看一下. 步骤1. 在web.config中的system.web节 ...

  6. c如何调用java_JNI学习------C语言调用Java (转)

    最近项目中需要使用JNI,所以研究了一下,其中遇到过不少问题,总结一下,让遇到同样问题的人可以得到解决. 在C/C++中调用Java的方法一般分为五个步骤:初始化虚拟机.获取类.获取类的方法.创建类对 ...

  7. EasyPlayerPro(Windows)流媒体播放器开发之跨语言调用

    下面我们来讲解一下关于EasyPlayerPro接口的调用,主要分为C++和C#两种语言,C++也可以基于VC和QT进行开发,C++以VC MFC框架为例进行讲解,C#以Winform框架为例进行讲解 ...

  8. c语言调用python3_linux下c语言调用python方法问题

    //c语言多线程调python,必须加上红色字体,因为python本身不是线程安全的 PyObject* callPython(char* cpModelPath) { if(cpModelPath ...

  9. html5d调用百度语音,易语言调用百度语音平台实现文字转换语音功能的代码

    调用百度语音平台实现文字转换语音功能 此功能需要加载精易模块5.6 .版本 2 .支持库 wmp9 .程序集 窗口程序集1 .子程序 _试听按钮_被单击 播放器1.地址 = "http:// ...

最新文章

  1. 百度前端技术学院js任务三
  2. 无论什么级别程序员,“微服务架构”都是你必须过的坎!
  3. android 全屏动画,Android开发之全屏与非全屏的切换设置方法小结
  4. Hyper-V 2016:支持guest操作系统
  5. Linq之Lambda表达式初步认识
  6. git 常用的撤销操作
  7. 基于TensorFlow.js的JavaScript机器学习
  8. 拳打苹果 脚踢三星 国产品牌占据泰国手机市场超半数份额!
  9. 2021牛年春节海报PSD分层模板,简单一点就好!
  10. java通信方式_java 认知底层的五种通信方式
  11. dalsa相机设置编码器外触发_Modicon M262 编码器接口功能介绍
  12. ST-Link驱动安装包 STM32 keil
  13. 网管员常用工具(二)
  14. 利用opencv对图像进行二值化处理
  15. 来咯来咯~你想要的unity3d人物游戏模型素材都在这里
  16. 西门子g120变频器接线图_【直播】S71200与SINAMICS G120变频器的profinet通信
  17. 精准测试系列产品白皮书2020版
  18. Minecraft Mod 开发:目录
  19. python 编写正三角形,倒三角和菱形和各种镂空菱形
  20. 电脑桌面云便签软件怎么显示最小化按钮?

热门文章

  1. 软件项目实施策略-之实施步骤
  2. php 数组字符串替换字符串,利用PHP怎么替换数组的字符串
  3. 正在让全人类颤抖的,是这7位中国年轻人!
  4. CPU发现高危安全漏洞 修复要损失多达39%性能
  5. Windows 下的 OpenGL 开发环境配置(GLFW+GLAD)
  6. 图——邻接表的存储及基本操作
  7. 需求与商业模式创新-需求5-确定项目的前景和范围
  8. android 自定义日历 数据,Android实现自定义日历.pdf
  9. MySQL操作JSON
  10. 用手机远程控制手机,用电脑控制iPhone,分别应该下载什么APP?