# worker框架
小游戏框架内对微信小游戏的基础worker实现了一套框架封装,使其可以每帧执行任务,并与主线程进行数据交互。
封装后的worker有如下能力
- 与主环境生命周期协作的调度时序
- 易于使用的共享内存
- 使用Job进行逻辑抽象
# 大致调度时序
worker任务时间较短
worker任务时间较长
同时存在多个worker任务
# 一、worker侧配置
开启worker文件夹
小游戏框架下指定assets/workers目录为worker目录,开发者可以在Inspector标签中设置开启。 开启后选择workerSystem模版。(也可以选择普通workers文件夹使用简洁模式。) 设置为worker文件夹后,会发现文件夹内多了一些文件,请不要手动修改这些文件。
添加worker任务
现在可以新建第一个worker任务了。
在worker文件夹下新建脚本文件myJob.ts,
输入以下代码:import { Job } from "engine-worker-env"; export default class MyJob extends Job { protected init() { // customized init } protected update() { // real work } }
任务的内容先省略,后面再回来填充。
# 二 主线程侧配置
这里默认您已经大致知道小游戏框架改如何使用了(包括如何写脚本等),如果您还不会使用小游戏框架制作简易游戏,烦请先返回之前的文档进行学习。
在需要的地方启动worker任务
假如我们想要worker执行一个最简单的任务:每帧将一个值加1。
在想要启动worker任务的时候,执行以下代码:const game = engine.game // 定义主线程和worker进行交互的数据块 const data = { num: game.workerSystem.createSharedArrayBuffer(4); }; const numView = new Float32Array(data.num.buffer); numView[0] = 0; // game.createWorkerJob的第一个参数对应myJob.ts的路径 const job = game.createWorkerJob("myJob", data); // job.start()里定义了每帧worker任务结束之后主线程的任务回调 job.start(() => { console.log(numView); });
接下来只要去myJob.ts里完善任务内容就可以了。
完善任务内容
修改myJob.ts:
import { Job } from "engine-worker-env"; export default class MyJob extends Job { private numView: Float32Array; protected init() { // this.data就是主线程传递过来的交互数据块 this.numView = new Float32Array(this.data.num.buffer) } protected update() { this.numView[0] = this.numView[0] + 1; } }
# 三、预览和构建
预览
在IDE里选择场景并预览之后,就能在控制台看到打印出来不断递增的数字了。
构建
先点击构建Npm。
然后正常构建项目即可。