CocosCreator 中 JS 与 Java 互相调用方式和注意事项

  • 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 线程中的。

    1. 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() {br/>@Override
    public void run(){
    Cocos2dxJavascriptJavaBridge.evalString("cc.wxcb.onLoginResp(‘"+ authResp.token +"‘)");
    }
    });

    CocosCreator 中 JS 与 Java 互相调用方式和注意事项

    原文地址:http://blog.51cto.com/13807145/2132839

    时间: 2024-10-10 15:42:37

    CocosCreator 中 JS 与 Java 互相调用方式和注意事项的相关文章

    SeaJS中jQuery插件模块化及其调用方式

    转载自:http://my.oschina.net/briviowang/blog/208587#OSC_h3_1 jQuery插件本质上是将命名空间挂在全局的jQuery或jQuery.fn上而非使用define定义的模块. JQuery的这种扩展机制同模块化要求模块的独立性,以及模块互相隔离有点冲突. jQuery插件数目众多,我们不打算做大量的转换工作,为模块化而模块化,甚至改变插件的调用方式, 这样对开发带来的价值不大.只希望通过模块加载器实现自动的依赖管理,按需加载,并且使用方式自然.

    【JS】Js中函数的三种调用方式

    在同一个页面中,函数名必须是唯一的,并且区分大小写.Js中可以通过下面三种方式调用函数: 1. 函数的简单调用 2. 在事件的响应中调用函数 3. 通过连接调用函数 具体是怎么操作的呢,下面一一讲解: 函数的简单调用:函数的定义语句通畅被放在HTML文件的<head>内,而函数的调用语句通常被放在<body>中.如果函数定义之前调用函数,执行将会出错. 语法如下: <head> <script type="text/javascript">

    js函数的非常规调用方式

    我们都知道,函数的声明方式有这两种 function fnA(){alert('msg');}//声明式定义函数 var fnB = function(){alert('msg');}//函数赋值表达式定义函数 通常,我们调用一个方法的方式就是 FunctionName() 但是,如果我们尝试为一个"定义函数"末尾加上(),解析器是无法理解的. function msg(){   alert('message'); }();//解析器是无法理解的 定义函数的调用方式应该是 msg()

    Javascript中函数的四种调用方式

    一.Javascript中函数的几个基本知识点: 1.函数的名字只是一个指向函数的指针,所以即使在不同的执行环境,即不同对象调用这个函数,这个函数指向的仍然是同一个函数. 2.函数中有两个特殊的内部属性:arguments和this. arguments主要是用来保存函数参数,arguments中的callee属性主要是用来指向拥有当前arguments的函数(理解Javascript参数中的arguments对象). 3.在ECMAScript5中规范了另一个函数属性:caller(Opera

    类中方法的两种调用方式

    class Foo(object): def func(self, name): print(name) # 第一种,通过实例对象调用func方法 foo = Foo() foo.func('allin') # 第二种,通过类名调用func方法 foo = Foo() Foo.func(foo, 'allin') # 两种方法等价 原文地址:https://www.cnblogs.com/xiangxiaolin/p/11185078.html

    vue-cli3中引入图片的几种方式和注意事项

    如果你是在数据中引入图片,他是从项目中引入的应该按第一种方式引入 如果不是在数据中引入图片,按第二种方式引入 原文地址:https://www.cnblogs.com/jxnc/p/12266781.html

    Android混合开发之WebViewJavascriptBridge实现JS与java安全交互

    前言: 为了加快开发效率,目前公司一些功能使用H5开发,这里难免会用到Js与Java函数互相调用的问题,这个Android是提供了原生支持的,不过存在安全隐患,今天我们来学习一种安全方式来满足Js与java互相调用的需求.它就是WebViewJavascriptBridge. 学习动机: 先看下之前的解决办法:Android混合开发之WebView与Javascript交互 最近棒棒安全的一个市场推广来我们公司推广他们的产品,当时也没太引起我的注意,后来这个市场推广人员把我们的app的进行了他们

    Js和原生相互调用总结

    一.前言 现在市面上有一些app是通过原生ios.Android加载一个网页实现的,如图所示,这样的app我们称之为 Hybrid App                              那么为什么要用 hybrid app呢? 个人认为的原因有两点:1.提高开发效率,以钉钉为例在涉及到一些OA操作比如打卡,请假等功能的时候,显然一个嵌入一个网页就能够满足需求,如果在让IOS和Android再去各自开发一套那么效率就很低了.2.提高迭代效率.以商城为例,商城页面会根据市场情况实时发生变

    java通过jni方式获取硬盘序列号(windows,linux)

    linux系统java通过jni方式获取硬盘序列号 http://blog.csdn.net/starter110/article/details/8186788 使用jni在windows下读取硬盘序列号 http://www.iflym.com/index.php/code/201109070001.html 通常做java程序的开发人员都想过想要通过某种手段来保护自己的程序.一般的方式是通过授权,采取软件授权的方式.这个时间就需要读取客户机器上的一些关键信息,比如硬盘序列号,网卡,cpu信