关于 remix-save-game
remix-save-game 是面向 Remix 平台 HTML 游戏开发者的技能,指导使用 RemixSDK 持久化游戏进度。内容涵盖 SDK 初始化、读取已有状态及在关键进度点保存。
主要功能
- 01初始化 RemixSDK
- 02读取已有存档状态
- 03在检查点保存进度
- 04处理空状态并设置默认值
- 05使用可序列化的游戏状态
适用场景
- 01为点击游戏恢复分数
- 02保存平台游戏的关卡进度
- 03在玩家完成关卡时记录状态
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ farworld-labs/ remix-skills --skill remix-save-game安装后在 Claude Code 中输入/remix-save-game确认已加载。
详细介绍
集成游戏状态保存工作流
概览
本技能将指导你在 Remix 平台的 HTML 游戏中集成游戏状态保存功能。借助 RemixSDK,玩家可以跨会话保存进度——包括分数、解锁的关卡、物品栏等。
前置条件
- 游戏必须包含 RemixSDK 脚本标签:
<script src="https://cdn.jsdelivr.net/npm/@remix-gg/sdk@latest/dist/index.min.js"></script> - 游戏必须已经可以游玩(如果从头开始,请先遵循 game-creation 工作流)。
步骤
1. 初始化 SDK
在游戏循环开始之前调用 await window.RemixSDK.ready()。这可以确保 SDK 已加载,且现有的已保存状态可供使用。
await window.RemixSDK.ready();
2. 加载现有状态
读取 window.RemixSDK.gameState 以获取之前保存的数据。它会返回 Record<string, unknown> | null | undefined——使用前务必检查是否为 null。
const savedState = window.RemixSDK.gameState;
使用已保存的状态恢复游戏进度;如果玩家是首次开始游戏,则使用默认值:
const state = savedState ?? { score: 0, level: 1 };
3. 在游戏过程中保存状态
每当玩家到达有意义的检查点时,都调用 saveGameState。gameState 的值必须是可序列化为 JSON 的对象。
window.RemixSDK.singlePlayer.actions.saveGameState({
gameState: { score: player.score, level: player.level },
});
示例
简单点击游戏
<script>
let clicks = 0;
async function init() {
await window.RemixSDK.ready();
// Load
const gameState = window.RemixSDK.gameState;
if (gameState && typeof gameState.clicks === "number") {
clicks = gameState.clicks;
}
document.getElementById("count").textContent = clicks;
document.getElementById("btn").addEventListener("click", () => {
clicks++;
document.getElementById("count").textContent = clicks;
// Save after every click
window.RemixSDK.singlePlayer.actions.saveGameState({
gameState: { clicks },
});
});
}
init();
</script>
带关卡进度的横版游戏
<script>
let level = 1;
let coins = 0;
async function init() {
await window.RemixSDK.ready();
// Load
const saved = window.RemixSDK.gameState;
if (saved) {
level = saved.level ?? 1;
coins = saved.coins ?? 0;
}
startLevel(level);
}
function onLevelComplete() {
level++;
coins += 10;
// Save at level transitions
window.RemixSDK.singlePlayer.actions.saveGameState({
gameState: { level, coins },
});
startLevel(level);
}
init();
</script>
提示
- 保持状态精简。 只保存恢复会话所需的内容——避免存储大型数组或临时 UI 状态。
- 在有意义的时刻保存——例如关卡完成、到达检查点或购买物品时——不要每帧都保存。
- 状态必须可序列化为 JSON。 不要包含函数、类实例或循环引用。
- 始终处理 null 的情况。 玩家首次加载游戏时,不会有已保存的状态。
评论
支持 Markdown