跳到主要内容

存档:先保存可恢复的数据

存档保存的是“恢复游戏需要的事实”,例如已解锁关卡、最高分与设置。不要直接把 Node、Component 或完整场景对象 JSON 化。

本地存档的最小流程​

sys.localStorage 使用字符串接口,JSON 解析、字段验证和版本升级由你负责。下载 SafeSave.ts 提供完整读取与写入函数;类型为:

type Progress = {
version: 1;
unlockedLevel: number;
bestScore: number;
};

示例限定关卡 1~1000、最高分 0~10 亿;这是教学数据范围,不是引擎限制。损坏或版本不匹配时回到默认值,写入失败返回 false。真实产品可增加备份、迁移与用户提示。

怎样接到闭环里​

把 SafeSave.ts 放入同一个脚本目录。在游戏初始化时调用 loadProgress();结算成功后基于当前数据生成新对象,再调用 saveProgress()。不要每帧保存,也不要在点击回调里反复解析整份存档。

import { loadProgress, saveProgress } from './SafeSave';
const previous = loadProgress();
const saved = saveProgress({
version: 1,
unlockedLevel: previous.unlockedLevel,
bestScore: Math.max(previous.bestScore, 200),
});
if (!saved) console.warn('本次进度未能写入本地存储');

这里的 200 仅代表示例结算分数,集成时替换为本局合法结果;解锁下一关也要以实际关卡规则计算。

本地与云端的分工​

本地可以被清除、损坏或修改。单机体验可接受一定风险,但排行榜、奖励和付费资产不应信任本地分数。

云进度还要定义冲突规则:两台设备分别推进,取最高关卡是否合理?消耗型道具不能简单取最大数量。请求超时后重试,需要幂等与版本检查,参见网络。

验收:空存档可启动;错误 JSON 可恢复;负数和超大值被拒绝;模拟写入失败不会阻断结算;旧版本有明确迁移或重置规则。

给 AI:“存档带 schema 版本,输入按 unknown 校验,捕获读写异常;区分丢失、损坏与云端冲突,不把客户端最高分当成可信排行数据。”

依据:数据存储。