cocos2dx-js(3.14版本) JS与C++ 互调 JS与JAVA 互调,JS与OC 互调
来源:互联网 发布:微信一键传图软件 编辑:程序博客网 时间:2024/06/14 14:17
1, JS 与 C++ 互调
调用的时候需要注意: 启动xcode 或者vs,为什么要这样呢, 是因为要C++ 要注册jsb 文件。
利用 引擎提供的jsbing生成工具, 新建MyJSBing类
#ifndef MYJSBING_H_#define MYJSBING_H_#include "cocos2d.h"#include "stdarg.h"USING_NS_CC;class MyJSBing : public Ref{public:MyJSBing();~MyJSBing();static MyJSBing *getInstance();int printClass(int data);void callFunction();private:static MyJSBing *_instance;};#endif
#include "MyJSBing.h"#include "scripting/js-bindings/manual/ScriptingCore.h"MyJSBing *MyJSBing::_instance = nullptr;MyJSBing::MyJSBing(){}MyJSBing::~MyJSBing(){}MyJSBing *MyJSBing::getInstance(){if (_instance == nullptr){_instance = new MyJSBing();_instance->autorelease();}return _instance;}int MyJSBing::printClass(int data){CCLOG("printClass data: %d", data);int a = 1;int b = 2;/** @ 类.函数(参数1, 参数2)*/bool ret = ScriptingCore::getInstance()->evalString("SDKManage.cpp_callback(404, 3)"); //C++ 调用JSreturn 222;}void MyJSBing::callFunction(){}
在app.js中, 调用 MyJSBing.getInstance.printClass(4), 即可完成js 调用C++
2, JS 与 Java 互调
/* * js-> java * java->js * */ public static void hello(String msg){ System.out.println(msg); } public static int sum(int a, int b){ return a + b; //这里一定要使用runOnUiThread } public static void sum(int a){ app.runOnGLThread(new Runnable() { @Override public void run() { Cocos2dxJavascriptJavaBridge.evalString("SDKManage.javaToJSCall(\"a\", 5 , 7)"); // java to js } }); }
// js调用Java /* *注意 另外有一点需要注意的就是,在android应用中,cocos的渲染和js的逻辑是在gl线程中进行的,而android本身的UI更新是在app的ui线程进行的, * 所以如果我们在js中调用的Java方法有任何刷新UI的操作,都需要在ui线程进行。 *jsb.reflection.callStaticMethod(className, methodName, methodSignature, parameters...) * */ //调用hello方法 jsb.reflection.callStaticMethod("org/cocos2dx/javascript/AppActivity", "hello", "(Ljava/lang/String;)V", "this is a message from js"); //调用第一个sum方法 var result1 = jsb.reflection.callStaticMethod("org/cocos2dx/javascript/AppActivity", "sum", "(II)I", 3, 7); cc.log("result sun(3, 7): ", result1); //10 //调用第二个sum方法 jsb.reflection.callStaticMethod("org/cocos2dx/javascript/AppActivity", "sum", "(I)V", 3);
3, JS 与 OC 互调
新建一个MyJSBOCClass.h, MyJSBOCClass.mm文件(为啥要是.mm文件呢, 这里是因为 oc 代码与c++代码混合编译。)
//// MyJSBOCClass.h// PlatformGame//// Created by Hejz on 17/2/11.////#ifndef MyJSBOCClass_h#define MyJSBOCClass_h@interface NativeOcClass : NSObject+(int)callNativeUIWithTitle:(NSString *) title andContent:(NSNumber *)content and3Content:(NSString *)co3ntent;+(int)callNativeUIWithTitle;+(int)callNativeUIWithTitle:(NSString *) oneData;@end#endif /* MyJSBOCClass_h */
//// MyJSBOCClass.m// PlatformGame//// Created by Hejz on 17/2/11./////* oc 调用 jsjs到OC的反射仅支持OC中类的静态方法。 方法名比较要需要注意,我们需要传入完整的方法名,特别是当某个方法带有参数的时候,你需要将他的:也带上。根据上面的例子。此时的方法名字是callNativeUIWithTitle:andContent:,不要漏掉了他们之间的:。 如果是没有参数的函数,那么他就不需要:, *///cc.log("jsb.reflection.callStaticMethod") //三个参数//var ret1 = jsb.reflection.callStaticMethod("NativeOcClass",// "callNativeUIWithTitle:andContent:and3Content:",// "cocos2d-js",// 55,// "___+++___Test");//cc.log("ret1: ", ret1);////var ret2 = jsb.reflection.callStaticMethod("NativeOcClass", //一个参数// "callNativeUIWithTitle:",// "cocos2d-js_one Data");//cc.log("ret2: ", ret2);//////var ret3 = jsb.reflection.callStaticMethod("NativeOcClass", //无参数// "callNativeUIWithTitle");//cc.log("ret2: ", ret3);#import <Foundation/Foundation.h>#import "MyJSBOCClass.h"#include "cocos2d.h"#include "cocos/scripting/js-bindings/manual/ScriptingCore.h"USING_NS_CC;USING_NS_CC_MATH;@implementation NativeOcClass+(int)callNativeUIWithTitle:(NSString *) title andContent:(NSNumber *)content and3Content:(NSString *)thridValue { NSLog(@"title: %@", title); NSLog(@"content: %d", content); NSLog(@"thridValue: %@", thridValue); return 456;}+(int)callNativeUIWithTitle { NSLog(@"void data"); /* * OC 调用 js */ ScriptingCore::getInstance()->evalString("testClass.testFunction(3, 4)"); return 999;}+(int)callNativeUIWithTitle:(NSString *) oneData { NSLog(@"oneData: %@", oneData); return 123;}@end
0 0
- cocos2dx-js(3.14版本) JS与C++ 互调 JS与JAVA 互调,JS与OC 互调
- Java与Js互调
- cocos js- android 平台 java与js互调 , ios平台 Objective-c与js互调
- oc与js 交互
- oc与js交互
- JS与OC交互
- js与oc 交互
- OC与JS交互
- OC与JS交互
- OC与JS交互
- OC与JS交互
- OC 与JS 交互
- OC与JS交互
- oc 与 js 交互
- OC与JS交互
- OC与JS交互
- oc与js交互
- js与oc交互
- 网站开发进阶(四十五)浅谈XML与HTML的区别
- 最大流EK算法模板
- leecode 解题总结:62. Unique Paths
- redhat虚拟机
- PAT甲级练习1010. Radix (25)
- cocos2dx-js(3.14版本) JS与C++ 互调 JS与JAVA 互调,JS与OC 互调
- leetcode -- 101. Symmetric Tree 【对称树,结构,内容】
- 自定义圆继承button实现多点触控和单点触控
- 深入理解JVM(八)——类加载的时机
- OpenCV画椭圆、实心圆、凹多边形、线段、矩形
- Mybatis中使用占位符#
- pwnable.kr-random-Writeup
- Core Bluetooth
- git忽略之前以及上传的文件