游戏与 ArkTS 接口交互(Cocos Creator)

概述

场景一: 在游戏中调用HarmonyOS NEXT接口同步获取返回

在JavaScript中,通过jsb.reflection.callStaticMethod接口调用ArkTS接口获取返回结果。

场景二: 在游戏中调用HarmonyOS NEXT接口异步获取返回

  1. 通过jsb.reflection.callStaticMethod接口调用 HarmonyOS NEXT接口。
  2. 通过worker的通信机制发送消息给worker线程。
  3. 在worker线程中监听消息后执行evalString接口调用JavaScript全局代码。

在JavaScript中调用主线程的模块接口

  1. 导出模块接口。
function test(param: string): string { 
    // 业务逻辑
    return param; 
 } 
 function syncTest(param: string, cb: Function): void { 
    setTimeout( () => { 
       // 业务逻辑
        cb(param); 
    }, 1000) 
 }
 2. 在build-profile.json5文件中配置导出模块的文件路径。
buildOption: {
    arkOptions: {
      runtimeOnly: {
        sources: [
          "./src/main/ets/test.ts",
        ],
      },
    }
}
3.在游戏中调用模块。
let result1 = jsb.reflection.callStaticMethod(true,"entry/src/main/ets/test","entry/test",JSON.stringify(param)); 
let result2 = jsb.reflection.callStaticMethod(false,"entry/src/main/ets/test","entry/syncTest",JSON.stringify(param));

result1和reslut2都为同步返回的结果。

在ArkTS中主线程和worker线程交互

  1. 在主线程中创建worker实例。
workPort: PortProxy = new PortProxy(WorkerManager.getInstance().getWorker())
 2. 在主线程中监听worker线程的消息。
this.workPort._messageHandle = (e: MessageEvent<WorkerMessage>) {

}
3. 创建worker线程中与宿主线程通信的对象。
 let uiPort = new PortProxy(worker.workerPort)
4. 在worker线程中监听主线程的消息。
 uiPort._messageHandle = function (e) { 
 }
5. 发送消息。
 // 发送消息
 uiPort.postMessage(msgType, msgData)
 // 发送消息并获得返回值
 const result = await uiPort.postSyncMessage(msgType, msgData)

在ArkTS中调用JavaScript代码

  1. 游戏中的示例代码。
 // 游戏侧: 
 window.test1 = (a,b) => { 
   return a + b; 
 }
 window.person = { 
   name: "zhangSan", age: 18 
 }
 2. 在worker线程中调用。
 // arkts侧: 
 import cocos from 'libcocos.so’; 
 let test1 = cocos.evalString("test1(1,2)"); 
 console.log("返回结果:", test1, typeof test1);
 let test2 = cocos.evalString("person");
 console.log("返回结果:", test2.name, typeof test2);

更多内容请见:鸿蒙游戏开发者服务-鸿蒙游戏中心-游戏分发平台-华为开发者联盟
社群交流:
image

5赞

不错~ 顶一下很多人需要

2赞

刚好用到,救命了啊