posts

游戏客户端工程笔记 2021 年 4 月:签到日历、领奖事务与公会界面

2021 年 4 月的十篇客户端工程笔记,主线是「运营活动与社交系统的客户端实现」。奖励类覆盖成就反馈、每日签到日历、战令页面性能、领奖事务与世界事件调度,讨论的是如何在奖励数量增长时保持界面流畅与状态可信;社交与检索类覆盖公会界面与背包排序筛选,讨论权限、成员状态与检索规则;此外还有观战模式、伙伴表现与移动端输入框三篇,分别处理实时表现、AI 表现与输入体验。

这是 2021 年 4 月的客户端工程笔记。这个月的主题可以概括成一句话:当运营系统变多,客户端的状态一致性就成了主要矛盾。签到日历要保证 30 个格子的状态和服务器一致,领奖事务要保证一个按钮不会重复发奖也不会漏发,战令页面要在几百个奖励里保持滚动流畅,世界事件要在倒计时、资源预取和入口状态之间对齐。

除了奖励系统,这个月还有社交与检索两篇:公会界面的权限、成员列表和事务状态怎么拆,背包排序筛选如何让玩家在几百个物品里快速找到目标。另外三篇分别是观战模式、伙伴表现和移动端输入框,覆盖实时表现、AI 表现与输入体验三个方向。

建议把这个月当成「运营客户端」专题来读。它讨论的不是单个界面怎么做,而是当界面上挂载了大量服务端状态时,客户端如何组织数据流与事务边界。

专题速览

维度说明
文章数量10 篇
时间范围2021 年 4 月
主题分布运营活动与奖励 5 篇、社交与检索 2 篇、表现与输入 3 篇
面向读者运营系统客户端程序、UI 程序、客户端主程
阅读价值把「奖励越多越乱」拆成事务边界、状态模型与性能策略
难度工程实践为主,涉及较多状态建模讨论
关联月份与 3 月的任务追踪、5 月的邮件与排行榜形成运营系统闭环

本月问题地图

玩家感受工程根因对应文章
签到显示已签但没发奖日历状态没有以服务器为准签到日历
点了领奖发了两份领奖没有事务与幂等语义领奖事务
战令页面越滑越卡奖励列表没有虚拟化与分页战令页面性能
成就不停弹窗打断操作成就反馈没有节流与合并成就反馈
公会操作提示没权限权限状态没有统一来源公会界面
背包找不到东西排序筛选规则不清晰背包排序筛选
观战画面比实况慢一截观战缓冲与导播策略缺失观战模式
宠物看起来像在发呆伙伴表现与逻辑没有分层伙伴表现
输入框被键盘挡住输入框没有处理软键盘与中文输入移动端输入框
活动开始瞬间卡顿世界事件没有资源预取世界事件调度

运营活动与奖励

这一组五篇是本月的主体。它们共享同一个结构问题:客户端的奖励状态是服务端状态的投影,任何本地猜测都会在弱网或并发下暴露。所以核心工程问题是「谁拥有状态」和「什么时候允许本地乐观更新」。

文章核心内容
游戏客户端每日签到日历:把 30 个格子做成可信的状态机签到日历要以服务器状态为准,处理补签、跨月、跨天与时区边界
游戏客户端领奖事务:一个按钮如何避免重复、漏奖和弱网混乱领奖要具备幂等键、进行中状态与失败可重试,避免重复发放与漏发
游戏客户端战令页面性能:奖励很多时如何仍然滑得顺大量奖励需要分页、虚拟化与增量刷新,领取状态变更不能触发全量重建
游戏客户端成就反馈:进度、弹窗和红点如何不打扰玩家成就反馈需要节流、合并与优先级,避免连续弹窗打断操作
游戏客户端世界事件调度:倒计时、资源预取和入口状态世界事件要统一倒计时基准、提前预取资源并同步入口可见状态

社交与检索

文章核心内容
游戏客户端公会界面:权限、成员列表和事务状态怎么拆公会界面要拆开权限、成员状态与事务状态,避免三者互相污染
游戏客户端背包排序筛选:让玩家在几百个物品里快速找到目标排序与筛选规则要稳定、可预测、可组合,并与服务端数据保持一致

表现与输入

文章核心内容
游戏客户端观战模式:延迟缓冲、导播相机和公平边界观战需要延迟缓冲与导播相机,并明确信息可见性边界以保证公平
游戏客户端伙伴表现系统:让宠物看起来聪明但不添乱伙伴表现要与逻辑解耦,用表现层制造「聪明感」而不干扰玩家操作
游戏客户端移动端输入框:软键盘、中文输入法和提交体验输入框要处理软键盘顶起、中文输入法组合态与提交校验

关键结论速记

常见反模式

反模式后果
本地先标记已签到再请求请求失败后状态与服务端不一致
用按钮禁用防重复领奖网络抖动时仍可能重复提交
战令列表一次性实例化所有奖励中低端机滚动掉帧严重
每个成就单独弹窗连续成就时弹窗刷屏
公会权限判断散落各按钮权限变更后界面状态错乱
筛选规则依赖当前排序顺序组合筛选结果不可预测
观战直接复用战斗相机暴露不该看到的信息
输入框不处理输入法组合态中文输入出现重复或丢字

与其他月份的衔接

运营客户端的三个底线

无论运营界面做得多花哨,客户端侧有三条不能破的底线,本月的文章几乎都在围绕它们展开。

推荐阅读路径

运营系统客户端程序:按「签到日历 → 领奖事务 → 世界事件调度 → 成就反馈」顺序读,这四篇覆盖了运营活动最常见的状态与事务问题。

UI 性能同学:战令页面性能与背包排序筛选两篇是重点,前者讲渲染规模,后者讲规则设计,两者都是运营界面绕不开的题目。

社交系统程序:公会界面那一篇可以当作状态拆分的范例,读的时候重点看权限、成员、事务三者为什么必须分开。

刚接触运营需求的同学:建议先读领奖事务和签到日历,建立「客户端状态是投影」的基本认知,再去看其他功能会容易很多。

相关专题

全部文章 Game Golang Saas Rust 游戏开发 客户端开发 GameDev Products Lua 写作

游戏客户端公会界面:权限、成员列表和事务状态怎么拆

公会界面是多个系统的交叉口 公会界面不只是成员列表。它包含申请、审批、职位、公告、捐献、商店、活动、聊天、红点、权限和跨服状态。客户端如果把它当成一个大页面写,几次版本后就会出现谁都不敢改的巨型脚本:某个按钮的可见性依赖职位,某个红点依赖活动,某个列表依赖分页,某个弹窗又会修改成员状态。

8 分钟阅读

游戏客户端战令页面性能:奖励很多时如何仍然滑得顺

战令页面为什么容易卡 战令看起来是一个纵向奖励列表:等级、经验条、免费奖励、付费奖励、领取按钮。上线后它往往会变成客户端最重的活动页之一,因为它同时展示大量道具图标、品质框、动效、红点、购买入口、经验来源、任务跳转和赛季倒计时。玩家一打开页面,几十个格子一起加载,低端机就会掉帧。

8 分钟阅读

游戏客户端每日签到日历:把 30 个格子做成可信的状态机

签到日历是运营活动,也是客户端状态机 每日签到在需求文档里经常只有几行:展示本月奖励、玩家点击领取、连续签到给额外奖励、漏签可补签。真正落到客户端,问题会变成一串细节:今天到底按服务器时区还是本地时区计算,跨天时界面是否自动刷新,领取按钮点击两次会不会重复弹奖励,离线重连之后日历格子是不是要回滚,补签券不足时是否...

8 分钟阅读