在这里插入图片描述

网罗开发 (小红书、快手、视频号同名)

  大家好,我是 展菲,目前在上市企业从事人工智能项目研发管理工作,平时热衷于分享各种编程领域的软硬技能知识以及前沿技术,包括iOS、前端、Harmony OS、Java、Python等方向。在移动端开发、鸿蒙开发、物联网、嵌入式、云原生、开源等领域有深厚造诣。

图书作者:《ESP32-C3 物联网工程开发实战》
图书作者:《SwiftUI 入门,进阶与实战》
超级个体:COC上海社区主理人
特约讲师:大学讲师,谷歌亚马逊分享嘉宾
科技博主:华为HDE/HDG

我的博客内容涵盖广泛,主要分享技术教程、Bug解决方案、开发工具使用、前沿科技资讯、产品评测与使用体验。我特别关注云服务产品评测、AI 产品对比、开发板性能测试以及技术报告,同时也会提供产品优缺点分析、横向对比,并分享技术沙龙与行业大会的参会体验。我的目标是为读者提供有深度、有实用价值的技术洞察与分析。

展菲:您的前沿技术领航员
👋 大家好,我是展菲!
📱 全网搜索“展菲”,即可纵览我在各大平台的知识足迹。
📣 公众号“Swift社区”,每周定时推送干货满满的技术长文,从新兴框架的剖析到运维实战的复盘,助您技术进阶之路畅通无阻。
💬 微信端添加好友“fzhanfei”,与我直接交流,不管是项目瓶颈的求助,还是行业趋势的探讨,随时畅所欲言。
📅 最新动态:2025 年 3 月 17 日
快来加入技术社区,一起挖掘技术的无限潜能,携手迈向数字化新征程!


引言

如果你已经开始用 HarmonyOS 做游戏开发,大概率已经有一种感觉:

“能跑是能跑,但总感觉哪里不对劲。”

这其实很正常。

因为鸿蒙游戏开发,并不是“换个平台写代码”,而是:

换了一整套开发范式

这篇文章,我把实际开发中最常见、最容易踩的坑整理出来,基本都是“血泪教训级别”。

一、把鸿蒙当成“另一个 Android / iOS”

常见思路

Activity / ViewController → 页面
事件 → 回调
UI → 手动刷新

结果

  • 代码很别扭
  • 逻辑混乱
  • 性能问题频出

正确思路

@State score: number = 0

Text(`${this.score}`)

核心:

状态驱动 UI,而不是手动控制 UI

二、滥用 setInterval

很多游戏这样写

setInterval(() => {
  this.update()
}, 16)

问题

  • UI 卡顿
  • CPU 飙高
  • 发热

正确做法

this.player.x += 5

让状态驱动更新,而不是自己“造循环”。

关键点

鸿蒙不是 Game Loop 引擎

三、UI 和逻辑写在一起

示例

async loadData() {
  const res = await fetch(...)
  this.list = res
}

直接写在页面里。

问题

  • 页面越来越大
  • 无法复用
  • 难测试

正确结构

Page → UI
Service → 业务
this.list = await userService.getList()

这是最基础但最容易忽略的一点。

四、忽略多设备

常见问题

  • UI 写死
  • 输入绑定手机
  • 没有设备抽象

结果

一旦上 TV / 平板:

全部重写

正确做法

type DeviceType = 'phone' | 'tv'
if (device === 'tv') {
  TVUI()
}

本质:

一开始就要考虑“多端”

五、状态管理混乱

典型问题

this.score++
this.player.x++
this.enemy.hp--

散落各处。

结果

  • 状态不同步
  • Bug 难查
  • 多端无法协同

正确做法

GameStore.update({
  score: this.score + 1
})

核心:

统一状态源(Single Source of Truth)

六、过度依赖 UI 组件

示例

ForEach(1000 items)

问题

  • 渲染压力大
  • 掉帧

优化

  • 分页
  • 虚拟列表
  • 减少重绘

本质:

UI 是成本,不是免费资源

七、AI 接入方式错误

常见错误

// 每次点击都请求大模型
await llm.call()

问题

  • 延迟高
  • 成本高
  • 用户体验差

正确方式

if (simpleTask) {
  localModel.infer()
} else {
  cloudModel.call()
}

核心:

端侧优先 + 云端兜底

八、忽略异常处理

示例

const res = await fetch()

没有 try/catch。

结果

  • 崩溃
  • 卡死

正确写法

try {
  const res = await fetch()
} catch (e) {
  this.showError()
}

很基础,但很多人不做。

九、资源管理混乱

问题

  • 图片乱放
  • 命名混乱
  • 多分辨率未区分

结果

  • 包体膨胀
  • 维护困难

建议

assets
 ├─ images
 ├─ audio
 ├─ low_res
 └─ high_res

本质:

资源也是“代码”

十、没有“降级策略”

假设

所有设备性能都很好

现实

  • 老设备
  • 低性能设备

正确做法

if (lowEndDevice) {
  disableAnimation()
}

核心:

适配不是 UI,而是“体验等级”

十一、过早做复杂架构

一开始就设计:

  • 多设备
  • AI 系统
  • 分布式

结果

  • 开发效率极低
  • 项目难推进

正确路径

单设备 → 状态驱动 → 多端 → AI

一步一步来。

十二、最容易忽略的坑

1、用手游思维写鸿蒙代码

2、忽略状态管理

3、滥用定时器

4、不做分层

5、不考虑多设备

6、AI 使用不当

总结

鸿蒙游戏开发的坑,本质只有一个原因:

你还在用“旧范式”,做“新系统”。

可以用一句话总结所有问题:

错误方式

把鸿蒙当成“另一个平台”

正确方式

把鸿蒙当成“新的应用形态”

最后给你一个非常实用的判断标准,

如果你的代码是这样:

setInterval + 手动 render + UI 逻辑混杂

大概率在踩坑。

而正确的方向应该是:

State → UI(自动)→ Service → Agent

在 HarmonyOS 上,踩坑不可避免,但每踩一个坑,其实都在帮你完成一件事:

从“写代码的人”,变成“设计系统的人”。

Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐