Skip to content

其他实用功能 ​

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

学习目标 ​

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

核心语法 ​

  • NVL
  • side image
  • input
  • achievement
  • gallery

可运行示例 ​

text
define nn = Character("旁白", kind=nvl)
define n_e = Character("艾琳", kind=nvl)

label start:
    nn "夜色渐深。"
    n_e "你还醒着吗?"
    nn "屋里一片寂静。"
    nvl clear              # 清屏,开始新一页

教程正文 ​

这一章汇总常用但分散的功能,按需查阅。

1. NVL 模式(全屏文本) ​

ADV 模式是底部对话框;NVL 模式是整屏文字累积(像小说)。把角色 kind=nvl 即可:

text
define nn = Character("旁白", kind=nvl)
define n_e = Character("艾琳", kind=nvl)

label start:
    nn "夜色渐深。"
    n_e "你还醒着吗?"
    nn "屋里一片寂静。"
    nvl clear              # 清屏,开始新一页
  • nvl clear 清空当前累积。
  • nvl_clear_next 也可控制何时清屏。
  • NVL 菜单:用 menu 时会以 NVL 风格显示(可配 nvl_menu)。

2. 立绘 / 副形象 Side Image ​

Side Image 是“说话时在对话框旁显示的小头像”,按当前说话者自动切换:

text
# 命名规则:side + 角色 image 标签 + 属性
image side eileen = "side/eileen.png"
image side eileen happy = "side/eileen_happy.png"

define e = Character("艾琳", image="eileen")
label start:
    e happy "看,我的小头像出现在左边了。"
  • 引擎按说话角色的 image 标签自动找 side <tag> <attrs> 图。
  • 位置/显隐在 screens.rpy 的 say 屏幕里调整。

3. Speech Bubble(气泡对话) ​

8.x 内置“漫画气泡”模式,对话以气泡形式贴在角色旁,并提供所见即所得编辑器:

text
define b = Character(_("艾琳"), kind=bubble)
label start:
    b "这句话用气泡显示。"

运行时按 Shift+B 可打开气泡编辑器调整位置/形状。

4. 文本输入 Text Input ​

text
$ player = renpy.input("请输入你的名字:", default="旅人", length=12)
$ player = player.strip() or "旅人"
e "你好,[player]!"

也可在屏幕语言里用 input 控件做更复杂的输入界面。

CG 图鉴 ​

text
init python:
    g = Gallery()
    g.button("beach")
    g.image("cg beach")
    g.unlock_image("cg beach")          # 或用 persistent 条件解锁
    g.transition = dissolve

screen gallery():
    add "gui/gallery_bg.png"
    grid 3 2:
        add g.make_button("beach", "thumb/beach.png", xalign=0.5)

音乐室 ​

text
init python:
    mr = MusicRoom(fadeout=1.0)
    mr.add("audio/theme.ogg")
    mr.add("audio/battle.ogg")

screen music_room():
    textbutton "播放" action mr.Play()
    textbutton "停止" action mr.Stop()

场景回放 Replay ​

text
# 在可回放的剧情 label 前后用 Replay 动作让玩家重温
textbutton "回放第一章" action Replay("chapter1_scene", scope={})

6. 成就 Achievements ​

text
init python:
    achievement.register("first_clear")
label ending:
    $ achievement.grant("first_clear")

可对接 Steam(8.5 要求 Steamworks SDK 1.62)。详见第 19 章。

7. 对话历史 Dialogue History ​

玩家可回看已读对话。引擎自动记录 _history_list,内置 history 屏幕展示;可自定义其样式。

text
# screens.rpy 中已有 screen history(),可改其外观

8. Sprites(精灵系统,批量动态对象) ​

SpriteManager 适合管理大量同类动态对象(雪花、星空、弹幕):

text
init python:
    def update_snow(st):
        for s in snow.children:
            s.y += 1
        return 0

    snow = SpriteManager(update=update_snow)
    for i in range(50):
        snow.create("snowflake.png")

image snow = snow

9. 拖放 Drag and Drop ​

text
screen puzzle():
    draggable:
        drag_name "piece1"
        child "piece1.png"
        droppable False
    dropzone:
        drag_name "slot1"

用 Drag/DragGroup 实现拼图、卡牌、物品拖拽等交互。

10. 多角色同时对话 / 自定义键位 / 手势 ​

  • Multiple Character Dialogue:用 multiple= 让多个角色名同时显示在一句里。
  • Keymap:config.keymap 自定义按键绑定。
  • Gestures:移动端滑动手势(如左滑回退)。

常见坑 ​

  • Side image 依赖角色 image= 标签命名,命名不一致就不显示。
  • Gallery/MusicRoom 解锁状态记得用 persistent,否则换存档就锁回去。
  • NVL 与 ADV 混用时注意 nvl clear 的时机,否则文字会越堆越多。
  • SpriteManager/拖放属于进阶,先掌握屏幕语言与 CDD。

官方参考 ​

在 GenPy 里怎么做 ​

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

推荐继续阅读:

Built for GenPy creators.