他们正在使用延迟和部分图像,例如这个(看图像的底部):
并指定每个图像的哪个(矩形)部分在何时呈现,使其看起来像动画。
这是一个典型的texture atlas。
这是图片列表:
"anim/rename2_packed.png",
"anim/days_169_packed.png",
"anim/command_palette_packed.png",
"anim/goto_anything_packed.png",
"anim/goto_anything2_packed.png",
"anim/regex_packed.png"
这就是他们指定延迟和图像片段的方式
{"delay":1811,"blit":[[0,0,800,450,0,0]]},
{"delay":48,"blit":[[0,450,400,344,200,36],[66,982,63,15,0,36]]},
{"delay":798,"blit":[]}, etc...
如您所见,delay 是以毫秒为单位的时间,blit 看起来像 drawImage 的参数 - srcX、srcY、width、height、destX、destY。
每个“屏幕”都保存为一个单独的变量,例如 command_palette_timeline、days_169_timeline、goto_anything_timeline 等。每个都包含延迟/blit 对象数组,如上一段中的对象。
实际的渲染代码非常简单,它们遵循每个时间轴中的每个步骤,它们之间存在延迟,并且每个步骤都是这样渲染的:
for (j = 0; j < blits.length; ++j)
{
var blit = blits[j]
var sx = blit[0]
var sy = blit[1]
var w = blit[2]
var h = blit[3]
var dx = blit[4]
var dy = blit[5]
ctx.drawImage(img, sx, sy, w, h, dx, dy, w, h)
}