Skip to content

分层图像 ​

本页属于 GenPy Ren'Py 学习路线。教程内容面向 Ren'Py 8.x,并在页面末尾连接到 GenPy 的对应工作流。

学习目标 ​

  • 了解“分层图像”在 Ren'Py 项目中的用途。
  • 能在一个最小项目里验证本章相关语法或工作流。
  • 知道发布前需要检查的常见风险,并能在 GenPy 中继续维护。

核心语法 ​

  • layeredimage
  • attribute
  • group
  • always
  • if

可运行示例 ​

text
define e = Character("艾琳", image="eileen")
e happy "开心!"
e sad "难过……"

教程正文 ​

立绘往往由“身体 + 服装 + 表情 + 配件”多层叠加而成。layeredimage 让你声明这些层与属性, 再用 show name attr1 attr2 自由组合,避免为每种组合导出一张整图。

1. 基本结构 ​

text
layeredimage eileen:

    always:
        "eileen/base.png"          # 始终显示的底层(身体)

    group outfit:
        attribute dress default:
            "eileen/dress.png"
        attribute uniform:
            "eileen/uniform.png"

    group face:
        attribute happy default:
            "eileen/face_happy.png"
        attribute sad:
            "eileen/face_sad.png"
        attribute angry:
            "eileen/face_angry.png"

使用:

text
show eileen happy            # 默认 dress + happy
show eileen uniform sad      # 切换服装与表情
e angry "我生气了!"          # 配合 image= 的 say attributes

2. always(恒显层) ​

always: 块里的图无条件显示,通常放身体/底图。可有多个 always 段。

3. group(互斥分组) ​

  • 同一 group 内的 attribute 互斥:一次只显示一个(如表情只一个)。
  • default 关键字标记该组默认属性(未显式指定时显示它)。
  • 不同 group 之间可自由组合(服装 + 表情 + 发型……)。

4. group ... auto(自动按文件名生成) ​

auto 组会按命名规则自动扫描图片,省去逐个 attribute:

text
group face auto:
    attribute neutral default
# 会自动匹配 eileen_face_*.png 这类文件,生成对应属性

show eileen happy 会自动找到 auto 组里名为 happy 的图。

5. attribute 的条件与默认 ​

text
layeredimage eileen:
    attribute a
    attribute b default when not a     # 当没有 a 时,b 作为默认
    attribute c default when not b
  • default 让属性默认存在,直到同组其它属性被指定。
  • when 表达式 让默认行为依赖条件。

6. if / else(按变量条件选层) ​

层的显示可绑定到游戏变量:

text
layeredimage eileen:
    always:
        "base.png"

    if glasses == "evil":
        "glasses_evil.png"
    elif glasses == "normal":
        "glasses_normal.png"
    else:
        pass

glasses 变化时立绘自动更新(无需重新 show)。

7. 给层加变换 / 偏移 ​

属性块内可写 transform 属性或 ATL,对该层做定位/动画:

text
group accessory:
    attribute hat:
        "hat.png"
        xoffset 10 yoffset -40        # 调整该层位置

8. multiple 组(可同时显示多个) ​

普通 group 互斥;声明 group xxx multiple: 则组内属性可同时出现(如多个配饰)。

9. 与 say attributes 配合 ​

给角色设 image="eileen",台词前写属性即可换表情/服装(见第 4 章):

text
define e = Character("艾琳", image="eileen")
e happy "开心!"
e sad "难过……"

常见坑 ​

  • 各层 PNG 尺寸/对齐要一致(建议统一画布导出),否则错位。
  • always 放底图;表情/服装放各自 group,保证互斥正确。
  • auto 组依赖严格的文件命名规则,命名错了就匹配不到。
  • 层很多时注意性能与内存;可对静态组合做缓存。

官方参考 ​

在 GenPy 里怎么做 ​

  • 在 GenPy 的代码模式中维护相关 .rpy 文件,先保持语法清晰,再逐步加入本章功能。
  • 用故事图谱、变量、校验或演出编辑器把“能运行”提升到“可维护”。
  • 导出前结合 Ren'Py Lint 和 GenPy 校验结果,确认脚本、素材和发布路径一致。

推荐继续阅读:

Built for GenPy creators.