Ren’Py 的 layeredimage 是个很强大很方便的特性,但是它自动查找图像文件的逻辑,尤其涉及到 variant 和 prefix 看上去有点让人迷惑。我做了一些测试,然后总结在下文中。
基础用法
下面的代码定义了角色站立时的层叠式图像。
layeredimage hero stand:
group hand:
attribute up
上面这段代码中,hero stand 是这个 layeredimage 的 name, hand 是 group name, up 是其中一个 attribute.
在不设置 prefix 和 variant 的情况下,show "hero stand up" 或者 add "hero stand up" 会寻找任意文件夹下面的 hero_stand_hand_up.png 这个文件。当然,应该不局限于 png 后缀。
prefix 和 variant
如果在 group 中设置 prefix left, 那么使用图像的时候,必须写成 show "hero stand left_up" 的形式(注意 left_), 这会寻找 hero_stand_left_hand_up.png 这个文件。
如果在 group 中设置 variant behind, 并且不存在 prefix, 那么会通过 show "hero stand up", 寻找 hero_stand_hand_behind_up.png 这个文件。
总的来说,寻找的文件名的结构是 [layeredimage name][_prefix]_[group name][_variant]_[attribute].png, 并且不限制文件夹。
prefix 用于解决不同 group 共用相同 attribute 的问题,虽然它其实并没有解决这个问题。show image 的时候还是要带上 prefix, 这就和手动定义不同 group 和 attribute 一样,只是少写了几个字符。
variant 可以实现一个 group 有前后多个图层的情况,像是角色的一个发型可能有前发和后发两个图层改变,这样可以用一个 attribute 来切换多个图层。
另外有个很有用的特性,可以同时存在某个 group 和它的多个 variants, 这样默认的图层依然去按默认的文件名去找文件,而只在某些特殊的 attribute 上添加额外的文件。
image_format 和 format_function
image_format 的表现则是,指定在特定位置寻找文件,并且可以指定后缀名。image_format "my/dir/{image}.png". 值得注意的是,这里的 image 指的是前文提到的文件名的结构。
而 format_function 用于拦截加载文件的过程,返回可视化对象。可以用来批量增加滤镜之类的程序化特效。