如何在Scratch中实现自定义存档加载?保存角色、文本位置与进度
Scratch DDLC复刻存档加载功能实现方案
核心思路
把需要恢复的状态数据(角色位置、文本位置、当前文本)拼接成可复制的加载码,加载时拆分码并还原对应状态。
一、存档功能实现(按S键触发)
1. 准备全局变量
创建以下全局变量:
加载码:存储生成的存档字符串当前文本:实时记录当前正在显示的对话文本(对话切换/中断时同步更新)临时列表:临时存储拆分/拼接的状态数据
2. 编写存档自定义块
定义生成存档码块(勾选「运行时不刷新屏幕」):
定义生成存档码 清空[临时列表 v] // 保存主角角色位置 添加(x position of [主角角色 v])到[临时列表 v] 添加(y position of [主角角色 v])到[临时列表 v] // 保存文本框位置 添加(x position of [文本框角色 v])到[临时列表 v] 添加(y position of [文本框角色 v])到[临时列表 v] // 保存当前中断的文本 添加([当前文本 v])到[临时列表 v] // 拼接成加载码(用^做分隔符,避免和文本内容冲突) 将[加载码 v]设为(用"^"连接[临时列表 v]) // 显示加载码让用户复制 说(加载码)3秒
3. 绑定S键触发
在舞台或主角角色的代码中添加:
当按下[S v]键 调用[生成存档码 v]
二、加载功能实现(输入码恢复)
1. 编写加载自定义块
定义加载存档块:
定义加载存档 询问[请输入加载码]并等待 将[临时列表 v]设为(分割(回答)用"^") // 校验加载码格式是否正确 如果(长度 of [临时列表 v])=(5)那么 // 还原主角位置 将[x position of [主角角色 v]]设为(第1项 of [临时列表 v]) 将[y position of [主角角色 v]]设为(第2项 of [临时列表 v]) // 还原文本框位置 将[x position of [文本框角色 v]]设为(第3项 of [临时列表 v]) 将[y position of [文本框角色 v]]设为(第4项 of [临时列表 v]) // 还原当前文本并继续显示 将[当前文本 v]设为(第5项 of [临时列表 v]) 调用[显示当前文本 v] // 调用你原有的文本显示逻辑,从当前文本继续 否则 说[无效加载码,请检查输入]2秒
2. 触发加载
可以绑定按键(比如L键)或做加载按钮角色:
当按下[L v]键 调用[加载存档 v]
三、解决自定义块测试失败的常见问题
- 变量作用域错误:所有存储状态的变量必须是全局变量,不要用角色私有变量,否则跨角色调用自定义块时无法读取数据
- 分隔符冲突:如果文本内容包含常用符号,换成
^这类不常用的符号做分隔符,避免拆分时出错 - 数据顺序不一致:存档时添加数据的顺序必须和加载时取出的顺序完全对应,比如先存角色X,加载时就先取第1项设为角色X
- 文本同步问题:确保
当前文本变量在对话切换、中断时实时更新,比如每次显示新文本前都把变量设为对应内容
内容的提问来源于stack exchange,提问作者user22792537
相关产品推荐
相关产品推荐

