状态与数据
文本、图标与动态字符串
区分固定文案、可写文本、实时生成文本和项目图片资产。
状态与数据 · 文本
先判断文本是否需要保存,再选择字符串类型
固定按钮文案、玩家留言、AI 输出和实时状态摘要看起来都是文字,但它们的来源和保存方式不同。
# 四类内容怎样存
| 内容 | 推荐方式 | 示例 |
|---|---|---|
| 固定界面文案 | tools.tr(...) 或项目 i18n |
“购买”“返回”“体力不足” |
| 会写入存档的文本 | 允许修改的动态字符串 | 玩家昵称、当前留言、AI 摘要 |
| 每次读取都重新生成 | 动态字符串脚本 | 状态说明、对象详情、任务摘要 |
| 图标和图片 | SVG 字符串或项目图片资产 | 技能图标、角色图、背景图 |
不要为每个固定按钮创建一个可写动态字符串。也不要把业务数值长期塞进展示文本;数值应保存在属性、对象或动态表格中。
# 可写动态字符串
开启“允许修改”后,脚本可以写入最终文本:
player.setString("行动记录", tools.tr("你在废墟中找到了食物"));
可写内容进入玩家存档覆写,适合某一时刻产生并需要保留的结果。写进去的是最终字符串;切换语言不会自动重新翻译。需要多语言时,优先保存业务 key 或原始数据,在显示时生成文本。
对象类也可以绑定可编辑动态字符串。对象上下文读取时优先使用该对象自己的覆写,缺失时再回退到玩家级内容。
# 动态字符串脚本
脚本模式每次读取时同步返回字符串,适合根据最新状态生成内容:
const hp = player.getPro("生命");
const maxHp = player.getPro("生命上限");
if (maxHp <= 0) return tools.tr("状态未知");
return tools.tr("生命:{current}/{max}", { current: hp, max: maxHp });
它是只读函数,不能修改属性、发请求、打开弹窗或写存档。脚本模式与“允许修改”不能同时启用:一个表示实时计算,一个表示持久写入。
# 状态列表属于传统配置
传统模式可以为同一字符串或图标配置多个状态,并通过需求条件选择逐级、最先或最后满足的内容。它适合少量稳定分级;复杂逻辑和对象上下文更适合只读脚本。
维护状态列表时确认条件顺序。多条同时满足时,需求模式会直接决定最终结果。
# 项目图片资产
需要背景、角色、物品或 UI 位图时,先上传到当前项目图片资产,再让 AI 查询真实资源名和 URL。相同资源名再次上传可能覆盖旧资源,因此替换前要检查完整相对路径和引用范围。
渲染布局应使用项目资产或返回项目资源 URL 的动态字符串,不要编造不受控制的外部链接。重复列表图片可以设置懒加载,但首屏关键图不应依赖滚动后加载。
# 图标的选择
- 简单单色 UI 图标适合 SVG,能跟随颜色和尺寸。
- 需要纹理或角色画面的内容使用图片资产。
- 会按状态变化的徽章可以由动态字符串脚本返回安全 SVG/HTML。
- 高频精灵动画交给 Canvas 资产与 renderer,不要不断替换大段字符串。
# 给 AI 的文本契约
“当前任务摘要”是只读动态字符串。
它读取任务对象的名称、进度和目标,返回一行玩家可见文本。
没有当前任务时返回可翻译的“暂无任务”。
不得修改对象或发起 AI 请求。
营地渲染布局在任务区域读取它。
# 验收
- 固定文案能随项目语言切换。
- 可写文本保存和刷新后仍存在。
- 动态脚本多次读取不产生副作用。
- 对象行显示的是当前对象内容,不会串到其他实例。
- 图片资源有效,窄屏不拉伸变形,缺图有合理回退。
- AI 输出和联网文本只作为数据展示,不作为脚本或模块源码执行。
继续阅读:动态字符串脚本 和 渲染布局与 Canvas。