HarmonyOS应用开发实战:猫猫大作战-TypedArray 类型化数组
·


前言
TypedArray(类型化数组)是 JavaScript/ArkTS 中操作二进制缓冲区的高效接口。相比普通 Array,TypedArray 固定元素大小、内存连续、访问速度快,适合棋盘等固定结构的数值存储。
一、TypedArray 基础
// 使用 Int8Array 表示 5×8 棋盘
const boardBuffer = new ArrayBuffer(40); // 5×8=40 字节
const boardView = new Int8Array(boardBuffer);
// 设置位置 (2,3) 的猫咪等级
boardView[3 * 5 + 2] = CatLevel.MEDIUM;
// 读取
const level = boardView[3 * 5 + 2];
二、TypedArray 类型选择
| 类型 | 元素大小 | 取值范围 | 适用场景 |
|---|---|---|---|
| Int8Array | 1 字节 | -128~127 | 猫咪等级(0-6) |
| Uint8Array | 1 字节 | 0~255 | 网格状态、标记 |
| Int16Array | 2 字节 | -32768~32767 | 得分、连击 |
| Float32Array | 4 字节 | 浮点数 | 位置、动画插值 |
三、性能对比
| 操作 | 普通 Array | Int8Array | 提升 |
|---|---|---|---|
| 内存占用(5×8) | ~320 字节 | 40 字节 | 8x |
| 访问速度 | O(1) | O(1) | 内存连续 |
| 序列化 | JSON | 直接 buffer | 快速 |
四、游戏中的应用
// 使用 TypedArray 优化棋盘存储
class Board {
private data: Int8Array;
constructor() {
this.data = new Int8Array(5 * 8);
this.data.fill(0); // 0 = 空
}
get(x: number, y: number): number {
return this.data[y * 5 + x];
}
set(x: number, y: number, level: number): void {
this.data[y * 5 + x] = level;
}
clear(): void {
this.data.fill(0);
}
}
五、最佳实践
- 固定数据结构用 TypedArray:棋盘、网格
- Int8Array 适合等级:0-6 级用 1 字节足够
- 配合 ArrayBuffer:序列化时直接取 buffer
- 避免频繁创建:复用同一个 TypedArray 实例
总结
TypedArray 提供类型化的二进制缓冲区操作,内存占用低、访问性能好,适合棋盘等固定结构的数值存储。核心要点:new Int8Array(buffer) 视图、 固定元素大小省内存、 直接 buffer 序列化。
如果这篇文章对你有帮助,欢迎点赞👍、收藏⭐、关注🔔,你的支持是我持续创作的动力!
相关资源:
更多推荐



所有评论(0)