# MotaOffscreenCanvas2D 类 API 文档 以下内容由 `DeepSeek R1` 模型生成并微调。 --- ## 继承关系 ```mermaid graph LR MotaOffscreenCanvas2D --> EventEmitter ``` --- ## 属性说明 | 属性名 | 类型 | 默认值 | 说明 | | ---------------- | -------------------------- | -------- | ------------------------------------------- | | `canvas` | `HTMLCanvasElement` | - | 关联的 HTML 画布元素 | | `ctx` | `CanvasRenderingContext2D` | - | 画布的 2D 渲染上下文 | | `width` | `number` | 自动计算 | 画布的逻辑宽度(不包含缩放比例) | | `height` | `number` | 自动计算 | 画布的逻辑高度(不包含缩放比例) | | `autoScale` | `boolean` | `false` | 是否自动跟随 `core.domStyle.scale` 进行缩放 | | `highResolution` | `boolean` | `true` | 是否启用高清画布(根据设备像素比例缩放) | | `antiAliasing` | `boolean` | `true` | 是否启用抗锯齿 | | `scale` | `number` | `1` | 当前画布的缩放比例 | | `symbol` | `number` | `0` | 更新标识符,值变化表示画布被被动清空或调整 | | `freezed` | `boolean`(只读) | `false` | 当前画布是否被冻结(冻结后不可修改属性) | | `active` | `boolean`(只读) | `true` | 当前画布是否处于激活状态 | --- ## 构造方法 ### `constructor` ```ts function constructor( alpha: boolean = true, canvas?: HTMLCanvasElement ): MotaOffscreenCanvas2D; ``` **描述** 创建一个新的离屏画布。 **参数** - `alpha`: 是否启用透明度通道(默认为 `true`)。 - `canvas`: 可指定现有画布,未提供时自动创建新画布。 **注意** - 在自定义渲染元素中,建议使用 `RenderItem.requireCanvas` 而非直接调用此构造函数。 --- ## 方法说明 ### `size` ```ts function size(width: number, height: number): void; ``` **描述** 设置画布的尺寸。 **参数** - `width`: 逻辑宽度(最小为 1)。 - `height`: 逻辑高度(最小为 1)。 **行为** - 自动计算缩放比例(考虑 `highResolution` 和 `autoScale`)。 - 调整画布物理尺寸和样式尺寸。 **示例** ```typescript const canvas = new MotaOffscreenCanvas2D(); canvas.size(800, 600); // 设置画布尺寸为 800x600(逻辑尺寸) ``` --- ### `withGameScale` ```ts function withGameScale(auto: boolean): void; ``` **描述** 设置画布是否跟随 `core.domStyle.scale` 自动缩放。 **参数** - `auto`: 是否启用自动缩放。 **示例** ```typescript canvas.withGameScale(true); // 启用自动缩放 ``` --- ### `setHD` ```ts function setHD(hd: boolean): void; ``` **描述** 设置是否为高清画布(基于设备像素比例)。 **参数** - `hd`: 是否启用高清模式。 **示例** ```typescript canvas.setHD(false); // 关闭高清模式 ``` --- ### `setAntiAliasing` ```ts function setAntiAliasing(anti: boolean): void; ``` **描述** 设置抗锯齿功能。 **参数** - `anti`: 是否启用抗锯齿。 **示例** ```typescript canvas.setAntiAliasing(false); // 关闭抗锯齿 ``` --- ### `clear` ```ts function clear(): void; ``` **描述** 清空画布内容。 **注意** - 冻结状态下调用此方法会触发警告。 **示例** ```typescript canvas.clear(); // 清空画布 ``` --- ### `delete` ```ts function delete(): void ``` **描述** 删除画布,释放资源并解除 DOM 绑定。 **示例** ```typescript canvas.delete(); // 删除画布 ``` --- ### `freeze` ```ts function freeze(): void; ``` **描述** 冻结画布,禁止修改属性,并从全局列表中移除。 **示例** ```typescript canvas.freeze(); // 冻结画布 ``` --- ### `activate` ```ts function activate(): void; ``` **描述** 激活画布,使其跟随游戏缩放调整尺寸。 **示例** ```typescript canvas.activate(); // 激活画布 ``` --- ### `deactivate` ```ts function deactivate(): void; ``` **描述** 停用画布,不再自动调整尺寸,可能被垃圾回收。 **示例** ```typescript canvas.deactivate(); // 停用画布 ``` --- ## 静态方法说明 ### `MotaOffscreenCanvas2D.clone` ```ts function clone(canvas: MotaOffscreenCanvas2D): MotaOffscreenCanvas2D; ``` **描述** 复制一个画布对象,结果画布将被冻结。 **返回值** - 复制的画布对象(不可修改属性,但可绘制)。 **示例** ```typescript const cloned = MotaOffscreenCanvas2D.clone(sourceCanvas); // 复制画布 ``` --- ### `MotaOffscreenCanvas2D.refreshAll` ```ts function refreshAll(force: boolean = false): void; ``` **描述** 刷新所有已注册画布的尺寸(仅在窗口大小变化时自动调用)。 **参数** - `force`: 是否强制刷新所有画布(默认仅刷新启用 `autoScale` 的画布)。 --- ## 事件类型 ### `resize` **触发时机** 当画布被动调整尺寸时触发(例如窗口大小变化或 `core.domStyle.scale` 变化)。 **监听示例** ```typescript canvas.on('resize', () => { console.log('画布尺寸已调整'); }); ``` --- ## 使用示例 ```typescript // 创建画布 const canvas = new MotaOffscreenCanvas2D(); // 配置属性 canvas.size(800, 600); canvas.withGameScale(true); canvas.setHD(true); // 监听调整事件 canvas.on('resize', () => { console.log('画布尺寸已更新'); }); // 绘制内容 canvas.ctx.fillStyle = 'red'; canvas.ctx.fillRect(0, 0, canvas.width, canvas.height); // 冻结画布 canvas.freeze(); // 复制画布 const cloned = MotaOffscreenCanvas2D.clone(canvas); ```