实用创作流程
像素动画帧时长:检查保存后的 GIF

四帧动画不一定要让四帧停留一样久。闪烁的灯笼应该在睁开状态停留更久,半闭状态短些;平均分配时长,可能把短促眨眼变成缓慢起伏。
我们在 Ciyo 中制作了一个虚构的四帧灯笼,并检查下载后的真实 GIF。睁开、半闭、闭合、半闭分别持续 600、100、200、100 毫秒,完整循环为一秒。这是代码生成的时序示例,不是视频模型比较。
把帧顺序和帧时长分开记录
同时写明顺序和时长。PNG 帧条能直观展示帧顺序,但不能证明每帧会显示多久。跨工具交付时,应让时间清单跟随图像一起保存。
我们的时序有意重复半闭状态。两个半闭画面外观相同,却处于序列的不同位置。检查编码文件时,要保留这一顺序。
| 帧 | 状态 | 时长 | 累计结束时间 |
|---|---|---|---|
| 0 | 睁开 | 600 ms | 600 ms |
| 1 | 半闭 | 100 ms | 700 ms |
| 2 | 闭合 | 200 ms | 900 ms |
| 3 | 半闭 | 100 ms | 1,000 ms |
制作原生循环和查看副本
新建 Ciyo 项目,要求生成 32×32 GIF、128×32 四帧条,以及 256×256 最近邻放大预览。保持调色板和锚点几何一致。放大版本方便查看像素,不应悄悄替换原生游戏素材。
要求智能体写入 GIF 后重新打开,报告实际编码的帧数、每帧时长和循环设置。看起来正确的帧条,无法揭示这类导出差异。

只用代码生成一个虚构的4 帧 32x32 透明像素灯笼眨眼动画。保持几何锚点和调色板一致,帧顺序为睁开、半闭、闭合、半闭。时长为 [600,100,200,100] 毫秒,无限循环,完整周期为 1000ms。交付原生 GIF、4 帧 PNG 帧条,以及 8x 最近邻放大的 GIF 预览。把帧条和预览加入画布,提供下载链接,并在回复中重复时间清单。保存后检查 GIF 实际编码的每帧时长、尺寸、loop=0 和周期总时长,不要从静态帧条推断时间。不调用付费图像或视频生成。这是在真实 Ciyo 中用代码生成的示意样本,不是模型质量基准。检查导出文件,而不是只数画面
真实 Ciyo 输出包含帧条、原生 GIF 和放大 GIF。我们下载了原始 GIF 文件,并独立重新打开检查。两者都有四帧,编码时长为 [600,100,200,100],总计 1,000 ms,循环设置为 loop=0。
原生文件为 32×32,检查副本为 256×256。这些只是对两个文件的实测结果,不代表所有浏览器播放都精确,也不证明引擎时序或所有目标环境的动画质量。

更换封装格式时保留时序
Pillow 的 GIF 文档提供了逐帧时长和循环选项,我们据此检查示例。其他格式或导入器可能采用不同的时间表示。交付时附上时长清单,不要假设精灵图集会自动携带这些信息。
在目标动画系统中应用停留时间
如果引擎只导入图像,就在其动画系统中应用这四个时长。若导入器合并相同帧,或按固定帧率重新采样,应将结果与预期的一秒节奏比较。不要为了补偿原因不明的时序丢失而修改画面。

按预期显示尺寸看完整循环
在实际使用环境里播放动画,确认较长的睁开停留和短促过渡依然清楚。用放大副本检查锚点和像素一致性,再回到原生显示比例判断节奏。
在游戏动作中,时间还决定声音、特效和碰撞变化的发生时刻。本例眨眼没有攻击或伤害逻辑。应将这些事件放入单独、明确的时间线,并在引擎中测试。
常见问题
能从 PNG 帧条推断时长吗?
不能。帧条只显示画面和顺序。请读取时间清单,或检查编码后的动画。
loop=0 表示停止动画吗?
在本例的 GIF 文件中,loop=0 表示无限循环。
编码周期为一秒,就能保证所有环境播放都准确吗?
不能。需要在将要播放动画的浏览器、应用或引擎中验证。
让时间清单跟随角色动画帧
先在 Ciyo 中完成一个经过检查的示例。保留源文件,在自己的项目中使用前检查导出结果。