为微信小游戏添加周排行
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装 @user_c830ad09/wechat-weekly-leaderboard。
技能介绍
要解决什么问题
微信小游戏的好友排行榜必须走开放数据域:主域不能直接读好友的云存储,只能把 sharedCanvas 交给开放数据域去拉关系链并绘制。周榜还要按自然周隔离分数,只上报当周最好成绩,并避免异步回调乱序导致「好友列表闪一下只剩自己」这类体验问题。
技能如何工作
技能按微信官方分工落地一套可对照实现的流程:
- 主域:维护按
weekId键控的本地周最佳;通过wx.setUserCloudStorage只提交当周最优分(JSON 含wxgame.score、wxgame.update_time、weekId等);在现有面板矩形内缩放绘制sharedCanvas,并向开放数据域发送showWeeklyLeaderboard(含尺寸、像素比、key、周 id、本地/本人分数等)。 - 开放数据域:用
wx.getFriendCloudStorage/wx.getUserCloudStorage读榜;兼容微信排行 JSON 与纯数字;过滤非当周记录;排序、去重本人行后画到sharedCanvas。 - 稳定性:单调递增的 request id 丢弃过期回调;缓存当前 key + weekId 下最后一次有效的含好友行;开放数据不可用时主域提供短 loading 兜底。
实现前应先阅读技能附带的 references/wechat-open-data-weekly.md(消息约定、异步渲染约束与验收清单)。
适用边界
- 不把主游戏逻辑放进
open-data/;未使用后端/云数据库/第三方引擎的项目也不强行引入。 - 已有本地周最佳上传后,不必每次改分都上报;面板坐标优先用渲染器已有的 content 矩形,而非写死坐标。
- Canvas 兼容:除非项目已有封装,避免直接依赖
ctx.roundRect,改用手动路径辅助函数。
使用场景
- 已有原生微信小游戏计分逻辑,需要在游戏内面板里接入按自然周隔离的好友周榜展示
- 主域已能提交分数,但缺少 open-data 目录与 game.json 的 openDataContext,要从零补齐周榜双域结构
- 周榜面板偶发先显示好友再只剩自己,需要用 request id 与缓存策略排查异步渲染竞态
- 本地已记录当周最高分,需改为仅通过 wx.setUserCloudStorage 上报 JSON 周最佳而非每次改分都写云
适合人员
- 用原生 JavaScript 维护微信小游戏、负责 game.js 与计分存储的客户端工程师
- 要在不引入后端或第三方引擎的前提下,为现有项目补齐 sharedCanvas 周榜与关系链绘制的独立开发者
- 负责排查开放数据域 wx.getFriendCloudStorage 与主域 showWeeklyLeaderboard 消息联调的前端维护者
- 需要按 weekId 过滤云存储分数、避免跨周脏数据展示的小游戏玩法与数值策划协作实现同学