

子玥酱 (掘金 / 知乎 / CSDN / 简书 同名)
大家好,我是 子玥酱,一名长期深耕在一线的前端程序媛 👩💻。曾就职于多家知名互联网大厂,目前在某国企负责前端软件研发相关工作,主要聚焦于业务型系统的工程化建设与长期维护。
我持续输出和沉淀前端领域的实战经验,日常关注并分享的技术方向包括 前端工程化、小程序、React / RN、Flutter、跨端方案,
在复杂业务落地、组件抽象、性能优化以及多端协作方面积累了大量真实项目经验。
技术方向: 前端 / 跨端 / 小程序 / 移动端工程化 内容平台: 掘金、知乎、CSDN、简书 创作特点: 实战导向、源码拆解、少空谈多落地 **文章状态:**长期稳定更新,大量原创输出
我的内容主要围绕 前端技术实战、真实业务踩坑总结、框架与方案选型思考、行业趋势解读 展开。文章不会停留在"API 怎么用",而是更关注为什么这么设计、在什么场景下容易踩坑、真实项目中如何取舍,希望能帮你在实际工作中少走弯路。
子玥酱 · 前端成长记录官 ✨
👋 如果你正在做前端,或准备长期走前端这条路
📚 关注我,第一时间获取前端行业趋势与实践总结
🎁 可领取 11 类前端进阶学习资源 (工程化 / 框架 / 跨端 / 面试 / 架构)
💡 一起把技术学"明白",也用"到位"
持续写作,持续进阶。
愿我们都能在代码和生活里,走得更稳一点 🌱
文章目录
-
- 引言
- 一个常见但危险的起点
- [HarmonyOS 应用模型的隐含前提](#HarmonyOS 应用模型的隐含前提)
- 游戏世界的第一原则:循环,而不是事件
- 当应用模型"侵入"游戏核心,会发生什么?
-
- 信号一:状态开始"分层造假"
- 信号二:性能问题变得难以定位
- [信号三:引擎逻辑被迫向 UI 让步](#信号三:引擎逻辑被迫向 UI 让步)
- [HarmonyOS 真正该给游戏提供什么?](#HarmonyOS 真正该给游戏提供什么?)
-
- [HarmonyOS 对游戏"友好"的部分](#HarmonyOS 对游戏“友好”的部分)
- 一个更健康的分层方式
- [为什么"先按 App 写游戏"是个陷阱?](#为什么“先按 App 写游戏”是个陷阱?)
- 总结
引言
很多做 HarmonyOS 游戏的团队,在早期都会遇到一个看似很合理的问题:
既然运行在同一套系统上,
游戏能不能直接复用 HarmonyOS 的应用模型?
你会看到类似的判断:
"ArkTS + ArkUI 已经够用了"
"状态驱动 UI,本来就是现代架构趋势"
"先按 App 写,后面再慢慢调"
这些话,单独听都没错。
但真正决定项目后期形态的,从来不是"能不能跑",而是:
你一开始,是不是把"应用模型"
当成了"游戏模型"的上位抽象。
这一步一旦走错,后面每一行优化,都会变成在还债。
一个常见但危险的起点
很多 HarmonyOS 游戏项目,最初的结构都长得很像一个 App:
text
GamePage
├─ @State gameState
├─ @State player
├─ @State enemies
├─ UI 渲染
逻辑大致是:
ts
@State hp: number = 100
if (hp <= 0) {
GameOverView()
} else {
GameView()
}
从"能跑"的角度看,这套东西没问题:
- 画面能显示
- 状态能更新
- 逻辑也清晰
问题在于------你已经默认了一件事:
游戏的核心状态,
是给 UI 用来 rebuild 的。
而这,恰恰是应用模型里最深的一层假设。
HarmonyOS 应用模型的隐含前提
如果你把 HarmonyOS App 的模型拆开看,它背后有几个非常强的默认前提:
应用模型默认了什么?
- 状态变化是"离散的"
- UI 更新是"低频的"
- 重建成本是可控的
- 用户行为是主要驱动力
也就是说,这套模型的心智是:
用户点一下 → 状态变一次 → UI 跟着变
这在 App 世界里几乎是绝对正确的。
但一旦你把它搬进游戏领域,就会发生微妙的错位。
游戏世界的第一原则:循环,而不是事件
游戏不是"被点一下就变一次"的系统。
它的核心是一个持续存在的循环:
ts
loop() {
update(deltaTime)
physics.step()
render()
}
这里有几个根本差异:
- 状态是连续变化的
- 时间本身是输入
- 每一帧都在发生变化
- 渲染是循环的一部分,而不是结果
换句话说:
游戏不是在"响应状态变化",
而是在"消耗时间推进状态"。
这和应用模型的出发点,完全不在一个维度上。
当应用模型"侵入"游戏核心,会发生什么?
真正的问题,往往不是第一天就爆出来的。
而是随着项目推进,开始出现这些信号。
信号一:状态开始"分层造假"
你会看到这样的代码:
ts
@State uiHp: number
let realHp: number
为什么?因为:
- realHp 每帧都在变
- uiHp 只能"节流"更新
- 两者开始不同步
于是你引入:
- 镜像状态
- 缓存状态
- 中间态
应用模型的状态,开始变成"展示用副本"。
信号二:性能问题变得难以定位
当你把游戏状态塞进应用模型后:
- 每一次状态更新,都可能触发 UI 逻辑
- 每一帧,都在触碰声明式边界
- 性能瓶颈不再直观
你会开始看到一些熟悉但危险的讨论:
"这个 State 能不能不 rebuild?"
"这里是不是要拆 Component?"
"是不是该手动控制刷新?"
本质上,你已经在用 App 的工具,对抗游戏的节奏。
信号三:引擎逻辑被迫向 UI 让步
最致命的一点是:
游戏逻辑开始"为了 UI 而存在"。
比如:
- 更新顺序为了配合 UI
- 状态拆分为了避免 rebuild
- 架构设计围绕 Component 层展开
这意味着,你的引擎已经不再是核心。
HarmonyOS 真正该给游戏提供什么?
问题不在于 HarmonyOS 不适合做游戏。
而在于:
HarmonyOS 的应用模型,
不该成为游戏架构的中心。
如果你站在更现实的工程角度,HarmonyOS 对游戏真正有价值的,是这些东西。
HarmonyOS 对游戏"友好"的部分
- ArkTS 语言能力
- 系统级生命周期管理
- 输入系统
- 多端设备能力
- 工具链与调试体系
这些能力:
- 不干预游戏循环
- 不假设状态频率
- 不要求 UI 驱动一切
它们是平台能力 ,不是架构模板。
一个更健康的分层方式
真正跑得久的 HarmonyOS 游戏,往往更像这样:
text
GameCore
├─ World / Entity / System
├─ Update Loop
├─ Physics / AI
└─ Time-driven State
Render Layer
├─ ArkUI / Canvas / GPU
└─ 只读核心状态
Shell (HarmonyOS App)
├─ 生命周期
├─ 前后台
├─ 设置 / 登录 / 商店
这里有一个非常关键的边界:
应用模型,只包住"壳",
不触碰"循环"。
为什么"先按 App 写游戏"是个陷阱?
因为它会让你在最早期,就做出一个隐含决定:
游戏是 App 的一种特殊形态。
而现实是:
- App 是事件驱动系统
- 游戏是时间驱动系统
- 两者的"核心假设"不同
你当然可以让游戏"长得像 App",但你不该让它"活得像 App"。
总结
如果你问:
HarmonyOS 的应用模型,对游戏架构意味着什么?
更准确的答案是:
它定义了边界,而不是答案。
HarmonyOS 很适合:
- 承载游戏
- 管理生命周期
- 提供系统能力
但它并不适合:
- 定义游戏循环
- 承担高频状态演进
- 成为引擎抽象的上层
真正成熟的选择,从来不是:
- "我能不能复用应用模型?"
而是:
- "我该在哪一层,把它挡住。"
这道边界,决定的不是你今天能不能跑,而是你这个游戏,能不能一直跑下去。