HarmonyOS应用开发实战:猫猫大作战-TypedArray 类型化数组
前言
TypedArray(类型化数组)是 JavaScript/ArkTS 中操作二进制缓冲区的高效接口。相比普通 Array,TypedArray 固定元素大小、内存连续、访问速度快,适合棋盘等固定结构的数值存储。
一、TypedArray 基础
// 使用 Int8Array 表示 5×8 棋盘constboardBuffer=newArrayBuffer(40);// 5×8=40 字节constboardView=newInt8Array(boardBuffer);// 设置位置 (2,3) 的猫咪等级boardView[3*5+2]=CatLevel.MEDIUM;// 读取constlevel=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 优化棋盘存储classBoard{privatedata:Int8Array;constructor(){this.data=newInt8Array(5*8);this.data.fill(0);// 0 = 空}get(x:number,y:number):number{returnthis.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 序列化。
如果这篇文章对你有帮助,欢迎点赞👍、收藏⭐、关注🔔,你的支持是我持续创作的动力!
相关资源:
- TypedArray MDN 文档
- 第 149 篇:ArrayBuffer
- 第 151 篇:Notification
- 第 152 篇:addSlot