
回复
cke_2829.png
场景一:在游戏中调用HarmonyOS NEXT接口同步获取返回
在JavaScript中,通过jsb.reflection.callStaticMethod接口调用ArkTS接口获取返回结果。
场景二:在游戏中调用HarmonyOS NEXT接口异步获取返回
cke_8464.png
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都为同步返回的结果。
cke_11029.png
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)
cke_14842.png
// 游戏侧:
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);
更多问题可关注:
鸿蒙游戏官方网站:已有游戏移植-鸿蒙游戏-华为开发者联盟
公开课:华为开发者学堂