

CocosCreator 中 JS 与 Java 互相调用
source link: http://johnnyshieh.me/posts/cocoscreator-js-java-call-each-other/?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

最近项目是使用 CocosCreator 开发的一款小游戏,有些功能需要调用 Android 原生代码,这涉及到 CocosCreator 中 JS 与 Java 的互相调用问题,本文记录互相调用时的方式和注意事项。
1. JS 调用 Java 方法
在 CocosCreator 下 JS 调用 Java/Objective-C 的格式都是:
var o = jsb.reflection.callStaticMethod(className, methodName, methodSignature, parameters...)
JS 只能调用 Java 中的静态方法,需要传入类名、方法名、方法签名、方法参数,并且可以获得返回值。
类名
类名必须是包含 Java 包路径的完整类名,而且用斜线 /
代替点 .
,例如 com.johnny.test.WxApiHelper
应该传入 com/johnny/test/WxApiHelper
。
方法名
方法名很简单,就是方法本来的名字。
方法签名
方法签名有点复杂,最简单的方法签名是 ()V
,它表示一个没有参数也没有返回值的方法。括号里的符号表示参数类型,括号后面的符号表示返回值类型。因为 Java 是允许函数重载的,可以有多个方法名相同但是参数返回值不同的方法,方法签名正是用来帮助区分这些相同名字的方法的。
目前 Cocos Creator 中支持的 Java 类型签名有下面 4 种:
Java 类型 签名 int I float F boolean Z String Ljava/lang/String;如果是其他类型的话,可以考虑转换为 JSON 字符串。
参数
参数可以是 0 个或任意多个,直接使用 JS 中的 number,bool 和 string 就可以。
注意,如果 JS 调用 Java 过程中,需要更新 UI 元素,更新的部分代码需要运行在 UI 线程中 Activity.runOnUiThread(Runnable)
,因为 JS 调用 Java 的过程不是运行在 UI 线程中的。
2. Java 调用 JS 函数
有时候还需要在 Java 中回调 JS 函数,例如微信登录成功后回调给 JS 函数,目前的方式是用 Cocos2dxJavascriptJavaBridge
的静态方法 evalString()
。
// cc.wxcb 是挂在 cc 的一个对象 Cocos2dxJavascriptJavaBridge.evalString("cc.wxcb.onLoginResp('"+ authResp.token +"')");
所传参数只支持 JS 中的 number,bool 和 string。
但是需要注意的是 Java 回调 JS 时,一定要运行在 GL 线程中:
activity.runOnGLThread(new Runnable() { @Override public void run(){ Cocos2dxJavascriptJavaBridge.evalString("cc.wxcb.onLoginResp('"+ authResp.token +"')"); } });
Recommend
-
43
README.md FairyGUI-cocoscreator A flexible UI framework for Cocos Creator
-
27
-
9
iOS开发小记:ARC与非ARC工程互相调用 无意在CSDN某博客上看到这样一篇日志,果断收藏下来,原帖找不到了。前段时间在网上下下Demo来看,想自己引用到工程里,结果就引起ARC与非ARC的冲突,于是把原Demo的Code全部去掉ARC特性,这样做既麻烦又...
-
3
最新评论 1. Re:.NET 7 AOT 的使用以及 .NET 与 Go 互相调用
-
7
channel 互相传输数据以及传输大文件数据。 两个 channel 传输package com.redisc;import lombok.extern.slf4j.Slf4j;import java.io.FileInputStream;import java.io...
-
3
最近在一个项目中使用 CefSharp 加载H5页面, 其中一些业务逻辑需要调用 Js 函数, 同时 Js 也会调用一些 native 函数:这里我们使用官方的demo代码进行添加修改, 修改后的代码在此:
-
3
假设有两个KO,命名为moduleA.KO,moduleB.KO,现在要实现在moduleB.KO中调用moduleA.KO中的函数。 ModuleA实现 #include <linux/init.h> #include <linux/module.h> #include <linux/kernel.h> void...
-
4
CocosCreator3.8研究笔记(六)CocosCreator 脚本装饰器的理解 精选 原创 一、什么是装饰器?
-
6
CocosCreator3.8研究笔记(八)CocosCreator 节点和组件的使用 精选 原创 我们知道,在CocosCreator 节点和组件的...
-
6
CocosCreator3.8研究笔记(四)CocosCreator 脚本说明及使用(上) 精选 原创 在Cocos Creator中,脚本代码文件分...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK