❶ 安卓端:
在 Android 应用中,Cocos 引擎的渲染和 JS 的逻辑是在 GL 线程中进行的,而 Android 本身的 UI 更新是在 App 的 UI 线程进行的,所以如果我们在 JS 中调用的 Java 方法有任何刷新 UI 的操作,都需要在 UI 线程进行。
❷ js 端:
2. AS 端调用 js 方法
js 端: 被调用的方法一定要是 全局函数 ,要不然会报错
AS 端: 要返回到 GL线程里调用
具体请参考 cocos creator 官方文档中的 ‘Java 原生反射机制’ : 如何在 Android 平台上使用 JavaScript 直接调用 Java 方法
AS调用JS函数:ExternalInterface.call(JS中的函数名,参数一,参数二)//调用JS中的一个函数
以下AS代码:
import flash.external.ExternalInterface
例子:ExternalInterface.call('alert',‘hello world!’)//会弹出JS的提示框
JS调用AS函数:
ExternalInterface.addCallback(提供给JS调用的名称,调用的函数) //提供一个函数给JS调用
以下AS代码:
import flash.external.ExternalInterface
import mx.controls.Alert
public function asFunc(a:int,b:int):int
{
Alert.show(a+b)
}
ExternalInterface.addCallback("add",asFunc)
以下JS代码:
add(1,2)//调用的其实是AS中的asFunc方法 ,会在Flash中弹出提示框
as里不能直接调用到js里的变量,必须以传参的方式来进行,步骤如下:1)as调用js的方法A
ExternalInterface.call("A")
2)方法 A 调用as里的方法 B ,调用时将i作为参数
as里注册一个方法:ExternalInterface.addCallback("B",Real_B)
js里调用:document[flashObjectName].B(i)
其中flashObjectName是flash控件的id名.
3)在as的方法Real_B里,获取到传来的参数i,然后做想做的事情吧