跳转到内容

7. 识别旧版立绘帧

本课保留使用 SpriteBinding.animation 的旧版 0.5 创作示例。当前 VN 阅读器不投影、下载或播放这些旧帧。 下载中的 Pack 仍可校验,但立绘静态显示。新动画应使用 SpriteBinding.performance 中作者制作的 APNG 片段,详见当前 0.5 字段参考。以下步骤用于理解历史绑定与已存素材,不是开启当前阅读器动画的方法。

0.5 协议存在多个 Schema 修订。每份 ZIP 记录确切快照与 SHA-256;版本字符串相同,不代表功能支持相同。

使用附带的 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 绑定。

历史示例把开场对话的表演表情从 smile 改为 neutral,因为帧绑定属于 neutral。保留 smile 绑定供其他场合使用。修订号增加到 8;段落文字未变,因此摘要仍然有效。这不会使当前阅读器恢复旧版帧播放。

运行结构校验。服务还会检查真实图片尺寸和透明度:每边至少 128 像素,各帧尺寸相同,至少 5% 的像素接近透明、1% 接近不透明,整组解码像素预算不超过 16,777,216。基础图、眨眼帧和说话帧都计入预算。本例的三张 256×256 图片远低于限制。

当前阅读器中的预期是 neutral 静态立绘继续显示,旧帧不播放。站点测试仍检查历史素材的字节、尺寸、透明区域对齐与所选表情;它们不代表真实阅读器试玩,也不证明当前帧播放。Schema 通过不能把历史字段变成受支持的动画。

原创教学素材

以下是下载包中真实图片的静态预览。立绘帧分别展示便于对照,这里不是真实播放器。

原创几何教学图:温室玻璃、夕阳与幼苗。
greenhouse_art
透明画布上的原创 Rowan 几何教学肖像。
rowan_neutral
原创几何幼苗纪念物教学图。
seedling_reward
原创且对齐的 Rowan 微笑教学立绘。
rowan_smile
原创且对齐的 Rowan 眨眼教学帧。
rowan_blink
原创且对齐的 Rowan 说话教学帧。
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.json

Windows 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

下一课