这是 2021 年 4 月的客户端工程笔记。这个月的主题可以概括成一句话:当运营系统变多,客户端的状态一致性就成了主要矛盾。签到日历要保证 30 个格子的状态和服务器一致,领奖事务要保证一个按钮不会重复发奖也不会漏发,战令页面要在几百个奖励里保持滚动流畅,世界事件要在倒计时、资源预取和入口状态之间对齐。
除了奖励系统,这个月还有社交与检索两篇:公会界面的权限、成员列表和事务状态怎么拆,背包排序筛选如何让玩家在几百个物品里快速找到目标。另外三篇分别是观战模式、伙伴表现和移动端输入框,覆盖实时表现、AI 表现与输入体验三个方向。
建议把这个月当成「运营客户端」专题来读。它讨论的不是单个界面怎么做,而是当界面上挂载了大量服务端状态时,客户端如何组织数据流与事务边界。
专题速览
| 维度 | 说明 |
|---|---|
| 文章数量 | 10 篇 |
| 时间范围 | 2021 年 4 月 |
| 主题分布 | 运营活动与奖励 5 篇、社交与检索 2 篇、表现与输入 3 篇 |
| 面向读者 | 运营系统客户端程序、UI 程序、客户端主程 |
| 阅读价值 | 把「奖励越多越乱」拆成事务边界、状态模型与性能策略 |
| 难度 | 工程实践为主,涉及较多状态建模讨论 |
| 关联月份 | 与 3 月的任务追踪、5 月的邮件与排行榜形成运营系统闭环 |
本月问题地图
| 玩家感受 | 工程根因 | 对应文章 |
|---|---|---|
| 签到显示已签但没发奖 | 日历状态没有以服务器为准 | 签到日历 |
| 点了领奖发了两份 | 领奖没有事务与幂等语义 | 领奖事务 |
| 战令页面越滑越卡 | 奖励列表没有虚拟化与分页 | 战令页面性能 |
| 成就不停弹窗打断操作 | 成就反馈没有节流与合并 | 成就反馈 |
| 公会操作提示没权限 | 权限状态没有统一来源 | 公会界面 |
| 背包找不到东西 | 排序筛选规则不清晰 | 背包排序筛选 |
| 观战画面比实况慢一截 | 观战缓冲与导播策略缺失 | 观战模式 |
| 宠物看起来像在发呆 | 伙伴表现与逻辑没有分层 | 伙伴表现 |
| 输入框被键盘挡住 | 输入框没有处理软键盘与中文输入 | 移动端输入框 |
| 活动开始瞬间卡顿 | 世界事件没有资源预取 | 世界事件调度 |
运营活动与奖励
这一组五篇是本月的主体。它们共享同一个结构问题:客户端的奖励状态是服务端状态的投影,任何本地猜测都会在弱网或并发下暴露。所以核心工程问题是「谁拥有状态」和「什么时候允许本地乐观更新」。
| 文章 | 核心内容 |
|---|---|
| 游戏客户端每日签到日历:把 30 个格子做成可信的状态机 | 签到日历要以服务器状态为准,处理补签、跨月、跨天与时区边界 |
| 游戏客户端领奖事务:一个按钮如何避免重复、漏奖和弱网混乱 | 领奖要具备幂等键、进行中状态与失败可重试,避免重复发放与漏发 |
| 游戏客户端战令页面性能:奖励很多时如何仍然滑得顺 | 大量奖励需要分页、虚拟化与增量刷新,领取状态变更不能触发全量重建 |
| 游戏客户端成就反馈:进度、弹窗和红点如何不打扰玩家 | 成就反馈需要节流、合并与优先级,避免连续弹窗打断操作 |
| 游戏客户端世界事件调度:倒计时、资源预取和入口状态 | 世界事件要统一倒计时基准、提前预取资源并同步入口可见状态 |
社交与检索
| 文章 | 核心内容 |
|---|---|
| 游戏客户端公会界面:权限、成员列表和事务状态怎么拆 | 公会界面要拆开权限、成员状态与事务状态,避免三者互相污染 |
| 游戏客户端背包排序筛选:让玩家在几百个物品里快速找到目标 | 排序与筛选规则要稳定、可预测、可组合,并与服务端数据保持一致 |
表现与输入
| 文章 | 核心内容 |
|---|---|
| 游戏客户端观战模式:延迟缓冲、导播相机和公平边界 | 观战需要延迟缓冲与导播相机,并明确信息可见性边界以保证公平 |
| 游戏客户端伙伴表现系统:让宠物看起来聪明但不添乱 | 伙伴表现要与逻辑解耦,用表现层制造「聪明感」而不干扰玩家操作 |
| 游戏客户端移动端输入框:软键盘、中文输入法和提交体验 | 输入框要处理软键盘顶起、中文输入法组合态与提交校验 |
关键结论速记
- 签到类功能必须以服务器状态为准,本地只做展示优化。
- 领奖必须有幂等键与进行中状态,按钮禁用只是辅助。
- 奖励数量一多,页面性能的关键是虚拟化而不是优化单行。
- 成就弹窗需要节流与合并,否则会变成骚扰。
- 世界事件的时间基准必须统一,否则倒计时和入口状态会打架。
- 公会界面要把权限、成员、事务拆成三份状态。
- 排序筛选规则的稳定性比规则丰富度更重要。
- 观战的核心是延迟缓冲与信息可见性边界。
- 伙伴的「聪明感」应该在表现层实现,不要动逻辑层。
- 移动端输入框的问题大多来自软键盘与输入法,而不是控件本身。
常见反模式
| 反模式 | 后果 |
|---|---|
| 本地先标记已签到再请求 | 请求失败后状态与服务端不一致 |
| 用按钮禁用防重复领奖 | 网络抖动时仍可能重复提交 |
| 战令列表一次性实例化所有奖励 | 中低端机滚动掉帧严重 |
| 每个成就单独弹窗 | 连续成就时弹窗刷屏 |
| 公会权限判断散落各按钮 | 权限变更后界面状态错乱 |
| 筛选规则依赖当前排序顺序 | 组合筛选结果不可预测 |
| 观战直接复用战斗相机 | 暴露不该看到的信息 |
| 输入框不处理输入法组合态 | 中文输入出现重复或丢字 |
与其他月份的衔接
- 上接:本月的世界事件调度,是 2021 年 3 月任务追踪与入口状态话题的延伸。
- 下接:本月的领奖事务与邮件附件,在 2021 年 5 月形成完整的奖励闭环。
- 横向:战令页面性能与 2021 年 1 月的长列表优化是同一类渲染规模问题。
- 纵向:观战模式与 2021 年 6 月的网络同步、确定性模拟直接相关。
- 交叉:公会界面的状态拆分,与 2021 年 6 月的模块边界讨论互为印证。
- 呼应:伙伴表现与 2021 年 6 月的动画状态机、实体生命周期管理属于同一表现层体系。
- 补充:签到日历的时间边界,与 2021 年 6 月的时间与倒计时一致性是同一问题。
- 延伸:背包排序筛选与 2021 年 6 月的背包界面性能,分别处理规则与渲染两侧。
- 对照:观战模式与 2021 年 6 月的网络同步,都在处理「看到的世界与真实世界不一致」。
运营客户端的三个底线
无论运营界面做得多花哨,客户端侧有三条不能破的底线,本月的文章几乎都在围绕它们展开。
- 奖励结果必须来自权威逻辑,本地只负责展示,不能反过来决定结果。
- 任何一次奖励发放都必须可重试且幂等,否则弱网就是事故现场。
- 玩家在弱网下的操作意图不能被静默丢弃,失败必须可见、可恢复。
推荐阅读路径
运营系统客户端程序:按「签到日历 → 领奖事务 → 世界事件调度 → 成就反馈」顺序读,这四篇覆盖了运营活动最常见的状态与事务问题。
UI 性能同学:战令页面性能与背包排序筛选两篇是重点,前者讲渲染规模,后者讲规则设计,两者都是运营界面绕不开的题目。
社交系统程序:公会界面那一篇可以当作状态拆分的范例,读的时候重点看权限、成员、事务三者为什么必须分开。
刚接触运营需求的同学:建议先读领奖事务和签到日历,建立「客户端状态是投影」的基本认知,再去看其他功能会容易很多。
相关专题
- 游戏客户端专题导航:本月运营系统话题在整棵客户端树里的位置
- 2021 年 3 月客户端工程笔记:上个月的任务追踪与本月世界事件调度直接衔接
- 2021 年 5 月客户端工程笔记:下个月继续讨论邮件附件、排行榜与匹配排队
- 游戏服务端专题导航:奖励发放与事务一致性的服务端权威实现