HarmonyOS 小游戏《对战五子棋》开发第39篇 - 最佳实践与注意事项
📅 2026/7/12 18:22:09
👁️ 次浏览
避坑指南——鸿蒙游戏开发中必须注意的那些事一、ArkTS语言注意事项1. 不支持内联对象类型// ❌ 报错constitems:{row:number,col:number}[][];// ✅ 正确exportclassMove{row:number;col:number;constructor(row:number,col:number){this.rowrow;this.colcol;}}constitems:Move[][];2. Prop数组需要新引用触发Watch// ❌ 修改原数组不触发Watchthis.boardData[0]BLACK;// ✅ 创建新数组触发Watchthis.boardDatathis.engine.toFlatArray();3. 回调函数属性需要默认值// ❌ 缺少默认值onCellClick:(row:number,col:number)void;// ✅ 提供默认空函数onCellClick:(row:number,col:number)void(){};4. 所有类型必须显式标注// ❌ 依赖类型推断letcount0;// ✅ 显式标注letcount:number0;二、Canvas绘制注意事项1. onReady前不能绘制privateisReady:booleanfalse;.onReady((){this.isReadytrue;// 标记就绪this.drawBoard();})onDataChange():void{if(this.isReady){// 检查就绪this.drawBoard();}}2. 每次绘制必须clearRect// 不清空会导致画面叠加ctx.clearRect(0,0,size,size);// 然后重新绘制3. 尺寸通过onAreaChange获取.onAreaChange((_oldValue:Area,newValue:Area){constwnewValue.width;if(typeofwnumber){this.canvasSizew;}})4. 防御性检查if(size0)return;// 防止尺寸为0时绘制三、状态管理注意事项1. State vs Prop vs LinkState组件内部状态可变 Prop父→子单向传递只读副本 Link父↔子双向绑定引用同步2. StorageLink持久化// 自动持久化跨页面共享StorageLink(key)value:number0;3. 条件渲染会销毁组件if(this.showDialog){CustomComponent()// false时完全销毁true时重新创建}四、性能优化注意事项1. ForEach必须提供keyGeneratorForEach(data,(item){...},(item)item.id.toString())// ↑ 必须提供2. 避免在build()中做复杂计算// ❌ 每次重绘都计算build(){Text(this.expensiveCompute())}// ✅ 缓存计算结果privatecachedText:string;aboutToAppear(){this.cachedTextthis.expensiveCompute();}build(){Text(this.cachedText)}3. Canvas全量重绘够用15x15棋盘全量重绘约260次Canvas操作1-3ms完成。不需要增量更新。4. AI计算放在setTimeout中// 避免阻塞UI线程this.aiThinkingtrue;setTimeout((){this.makeAIMove();// AI计算在下一个事件循环},400);五、路由导航注意事项1. 页面必须注册// main_pages.json { src: [pages/Index, pages/TwoPlayerPage] }未注册的页面router.pushUrl会报错。2. 返回逻辑要考虑页面状态// AIBattlePage的返回按钮if(this.inGame){this.backToLevelSelect();// 游戏中→返回选关}else{router.back();// 选关→返回首页}3. 清理定时器aboutToDisappear():void{if(this.aiTimerId!-1){clearTimeout(this.aiTimerId);}}六、资源管理注意事项1. 颜色资源化// ❌ 硬编码.backgroundColor(#4A90D9)// ✅ 资源引用支持深色模式.backgroundColor($r(app.color.button_primary))2. 深色模式适配// dark/element/color.json{name:bg,value:#333333}3. 字符串国际化// zh_CN: { name: app_name, value: 五子棋 }// en_US: { name: app_name, value: Gomoku }七、调试技巧1. 统一日志前缀console.info([Gomoku] some message);// 方便过滤2. Previewer实时预览不需要启动模拟器快速查看UI效果。3. hdc日志查看hdc hilog|grepGomoku总结HarmonyOS游戏开发的核心注意事项ArkTS限制无内联类型、类型必须显式Canvas生命周期onReady后才绘制Prop数组需要新引用触发WatchForEach必须提供keyGenerator定时器清理aboutToDisappear中clearTimeout页面注册main_pages.json中注册所有页面资源化颜色/字符串用资源引用掌握这些注意事项能避免90%的常见问题。
五子棋教会我们的——游戏开发的通用方法论从五子棋中学到的设计模式
1. 引擎-UI分离模式
GomokuEngine(纯逻辑)与ChessBoardView(纯表现)分离。这是所有游戏开发的核心模式。
2. 状态机模式
用GameResult枚举管理游戏状态&#x…
📅 2026/7/12 18:22:09
从TypeScript迁移到ArkTS的第一个坑——内联对象类型问题描述
在TypeScript中可以写{ row: number, col: number }[],但ArkTS中会报编译错误。
解决方案
class替代(需要new实例时)
export class Move {row: number;col: number;constructor(r…
📅 2026/7/12 18:22:09
1. 项目概述:为什么Unity移动端输入系统需要一场“大修”?如果你正在开发一款Unity移动端游戏,并且还在使用那个经典的Input.touchesAPI,那么这篇文章就是为你准备的。我最近接手了一个老项目的性能优化工作,其中一个核…
📅 2026/7/12 18:21:08
硬件项目如果只能靠串口看数据,调试时当然没问题,但它很难变成一个真正“可访问”的设备。每次都要插 USB、打开串口、找日志,对自己还可以,对别人就不太友好。环境传感器这种项目更需要网页后台,因为很多状态用表格和…
📅 2026/7/12 19:17:26
很多人问0基础用openclaw难不难,今天我就直说:只要你不指望它像魔法一样变出代码,这玩意儿其实比你想象的要简单得多,甚至有点粗糙的可爱。这篇东西不整虚的,直接告诉你怎么绕过那些让你头秃的技术坑,把openclaw变成你手里最顺手的工具,而不是让你想砸键盘的废物。说实话…
📅 2026/7/12 19:15:54
DeepSeek4j性能优化策略:如何提升AI请求的响应速度和稳定性 【免费下载链接】deepseek4j deepseek java sdk 项目地址: https://gitcode.com/gh_mirrors/de/deepseek4j
在AI应用开发中,响应速度和稳定性是衡量用户体验的关键指标。DeepSeek4j作为…
📅 2026/7/12 19:16:26
NVIDIA Llama-Nemotron-Colembed-VL-3B-V2在医疗文档检索中的应用实践:终极指南 【免费下载链接】llama-nemotron-colembed-vl-3b-v2 项目地址: https://ai.gitcode.com/hf_mirrors/nvidia/llama-nemotron-colembed-vl-3b-v2
在当今医疗信息爆炸的时代&…
📅 2026/7/12 19:16:26
开发者深度指南:自定义llama-nemotron-embed-vl-1b-v2-fp8的嵌入向量维度与池化策略 【免费下载链接】llama-nemotron-embed-vl-1b-v2-fp8 项目地址: https://ai.gitcode.com/hf_mirrors/nvidia/llama-nemotron-embed-vl-1b-v2-fp8
🚀 如何优化多…
📅 2026/7/12 19:16:26
MaterialValues颜色系统深度解析:500颜色资源使用指南 【免费下载链接】MaterialValues An Android library for material design values 项目地址: https://gitcode.com/gh_mirrors/ma/MaterialValues
MaterialValues是一个专为Android开发者打造的Material…
📅 2026/7/12 19:16:26
豆包openclaw最近圈子里都在聊豆包openclaw,我也没忍住,掏腰包入手了一套。说实话,刚拿到手的时候,心里是打鼓的。毕竟市面上类似的智能硬件太多了,有的吹得天花乱坠,用起来却是一堆bug。为了不让大家的钱打水漂,我连续用了半个月。从开箱到日常高频使用,甚至故意测试它…
📅 2026/7/12 0:00:04
SQLyog 13.3.1 社区版在Windows 10/11上的完整安装与连接指南 对于刚接触MySQL数据库管理的开发者和学生来说,选择一个直观易用的图形化管理工具至关重要。SQLyog作为一款轻量级但功能强大的MySQL GUI工具,能够显著提升数据库操作的效率和体验。本文将详…
📅 2026/7/12 0:00:28
SPEC CPU 2006 跨平台基准测试深度实战:ARM/X86/MIPS 架构配置优化与结果分析方法论在当今多元化的计算架构时代,如何客观评估不同处理器平台的真实性能成为系统工程师和性能优化专家的核心挑战。SPEC CPU 2006 作为业界公认的计算密集型基准测试套件&am…
📅 2026/7/12 0:00:28
豆包openclaw最近圈子里都在聊豆包openclaw,我也没忍住,掏腰包入手了一套。说实话,刚拿到手的时候,心里是打鼓的。毕竟市面上类似的智能硬件太多了,有的吹得天花乱坠,用起来却是一堆bug。为了不让大家的钱打水漂,我连续用了半个月。从开箱到日常高频使用,甚至故意测试它…
📅 2026/7/12 0:00:04
SQLyog 13.3.1 社区版在Windows 10/11上的完整安装与连接指南 对于刚接触MySQL数据库管理的开发者和学生来说,选择一个直观易用的图形化管理工具至关重要。SQLyog作为一款轻量级但功能强大的MySQL GUI工具,能够显著提升数据库操作的效率和体验。本文将详…
📅 2026/7/12 0:00:28
SPEC CPU 2006 跨平台基准测试深度实战:ARM/X86/MIPS 架构配置优化与结果分析方法论在当今多元化的计算架构时代,如何客观评估不同处理器平台的真实性能成为系统工程师和性能优化专家的核心挑战。SPEC CPU 2006 作为业界公认的计算密集型基准测试套件&am…
📅 2026/7/12 0:00:28
目录
第一步:选对模板,省心一半
第二步:打开扫码点餐功能
开启功能按钮
桌台管理与桌码生成
第三步:个性化设计,打造品牌感
调整点餐页面
设置点餐规则 你还在让顾客站着排队点餐吗?2025年ÿ…
📅 2026/7/12 0:15:59
在业务中快速构建一个能理解私有文档、准确回答专业问题的智能助手,是很多开发团队面临的共同挑战。传统方案往往需要从零开始搭建复杂的 RAG(检索增强生成)系统,涉及文档解析、向量化、检索、大模型调用等多个环节,整…
📅 2026/7/12 15:39:57
FAE放射组学分析工具:医学影像特征探索的完整解决方案 【免费下载链接】FAE FeAture Explorer 项目地址: https://gitcode.com/gh_mirrors/fae/FAE
你是否曾经面对海量医学影像数据感到无从下手?想要从CT、MRI等影像中提取有价值的定量特征&#…
📅 2026/7/12 8:07:36