7. 识别旧版立绘帧
本课保留使用 SpriteBinding.animation 的旧版 0.5 创作示例。当前 VN 阅读器不投影、下载或播放这些旧帧。 下载中的 Pack 仍可校验,但立绘静态显示。新动画应使用 SpriteBinding.performance 中作者制作的 APNG 片段,详见当前 0.5 字段参考。以下步骤用于理解历史绑定与已存素材,不是开启当前阅读器动画的方法。
0.5 协议存在多个 Schema 修订。每份 ZIP 记录确切快照与 SHA-256;版本字符串相同,不代表功能支持相同。
从现有 neutral 立绘出发
Section titled “从现有 neutral 立绘出发”使用附带的 rowan-blink.png 和 rowan-talk.png,或以你的基础肖像制作拥有使用权的替代图。保持画布尺寸、身体位置、轮廓和透明区域对齐。眨眼帧只改眼睑,说话帧只改嘴部。若每帧都移动整个人物,播放时就会跳动。
把两张图声明为普通图片素材,填写真实摘要和大小,并加入本地素材清单。将 Rowan 的 neutral 立绘绑定上的 animation 属性(本例为 presentation.bindings[1].animation)设为:
{ "protocol": "storyorbit.sprite-frames/1", "blink": ["rowan_blink"], "talk": ["rowan_talk"]}数组存放的是素材 ID,不是路径、时长、音频或视频。每组最多 4 帧;服务语义要求两组加起来至少包含 1 帧。动画属于这个准确的绑定与表情,不会自动作用到 smile 绑定。
检查历史示例的表情绑定
Section titled “检查历史示例的表情绑定”历史示例把开场对话的表演表情从 smile 改为 neutral,因为帧绑定属于 neutral。保留 smile 绑定供其他场合使用。修订号增加到 8;段落文字未变,因此摘要仍然有效。这不会使当前阅读器恢复旧版帧播放。
运行结构校验。服务还会检查真实图片尺寸和透明度:每边至少 128 像素,各帧尺寸相同,至少 5% 的像素接近透明、1% 接近不透明,整组解码像素预算不超过 16,777,216。基础图、眨眼帧和说话帧都计入预算。本例的三张 256×256 图片远低于限制。
当前阅读器中的预期是 neutral 静态立绘继续显示,旧帧不播放。站点测试仍检查历史素材的字节、尺寸、透明区域对齐与所选表情;它们不代表真实阅读器试玩,也不证明当前帧播放。Schema 通过不能把历史字段变成受支持的动画。
原创教学素材
以下是下载包中真实图片的静态预览。立绘帧分别展示便于对照,这里不是真实播放器。

greenhouse_art
rowan_neutral
seedling_reward
rowan_smile
rowan_blink
rowan_talk在本地检查作品
在解压目录中创建环境并安装一次固定版本的依赖,然后检查两份文件。修改之后再次检查起始稿。每课都可以使用相同命令。
macOS / Linux
python3 -m venv .venv
.venv/bin/python -m pip install -r requirements.txt
.venv/bin/python check.py start/pack.json
.venv/bin/python check.py finished/pack.jsonWindows PowerShell
py -3 -m venv .venv
.venv\Scripts\python.exe -m pip install -r requirements.txt
.venv\Scripts\python.exe check.py start/pack.json
.venv\Scripts\python.exe check.py finished/pack.json完成稿的预期输出: Structural check passed: Creator Pack 0.5 随后显示确切 Schema SHA-256。这是结构检查,不代表服务准入或真实试玩通过。
完成稿中的可用片段
此片段直接取自经过检查的下载文件,并非完整 Pack。请在 start/pack.json 中修改相应字段,或对照 finished/pack.json。
{
"animated_binding": {
"role": "sprite",
"subject": {
"kind": "reader_card",
"id": "rowan"
},
"asset_id": "rowan_neutral",
"expression": "neutral",
"animation": {
"protocol": "storyorbit.sprite-frames/1",
"blink": [
"rowan_blink"
],
"talk": [
"rowan_talk"
]
}
},
"performance": {
"focus": true,
"expression": "neutral"
}
}查询相关字段: presentation