mcpField
R
remix-save-game

remix-save-game

github.com/farworld-labs开发57 次安装
代码仓库

关于 remix-save-game

remix-save-game 是面向 Remix 平台 HTML 游戏开发者的技能,指导使用 RemixSDK 持久化游戏进度。内容涵盖 SDK 初始化、读取已有状态及在关键进度点保存。

主要功能

  1. 01初始化 RemixSDK
  2. 02读取已有存档状态
  3. 03在检查点保存进度
  4. 04处理空状态并设置默认值
  5. 05使用可序列化的游戏状态

适用场景

  1. 01为点击游戏恢复分数
  2. 02保存平台游戏的关卡进度
  3. 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