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

游戏技术分享
发布于 2025-5-7 15:30
浏览
0收藏

概述

游戏与 ArkTS 接口交互(Cocos Creator)-鸿蒙开发者社区cke_2829.png

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

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

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

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

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

游戏与 ArkTS 接口交互(Cocos Creator)-鸿蒙开发者社区cke_8464.png

  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线程交互

游戏与 ArkTS 接口交互(Cocos Creator)-鸿蒙开发者社区cke_11029.png

  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线程中监听主线程的消息。

_messageHandle = function (e) { 
 }

    5. 发送消息。

// 发送消息
 uiPort.postMessage(msgType, msgData)
 // 发送消息并获得返回值
 const result = await uiPort.postSyncMessage(msgType, msgData)

在ArkTS中调用JavaScript代码

游戏与 ArkTS 接口交互(Cocos Creator)-鸿蒙开发者社区cke_14842.png

  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);

更多问题可关注:

鸿蒙游戏官方网站:​​已有游戏移植-鸿蒙游戏-华为开发者联盟​

公开课:​​华为开发者学堂​

©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
分类
收藏
回复
举报
回复
    相关推荐