其他实用功能
本页属于 GenPy Ren'Py 学习路线。教程内容面向 Ren'Py 8.x,并在页面末尾连接到 GenPy 的对应工作流。
学习目标
- 了解“其他实用功能”在 Ren'Py 项目中的用途。
- 能在一个最小项目里验证本章相关语法或工作流。
- 知道发布前需要检查的常见风险,并能在 GenPy 中继续维护。
核心语法
NVLside imageinputachievementgallery
可运行示例
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 控件做更复杂的输入界面。
5. 图鉴 / 音乐室 / 回放(Gallery / Music Room / Replay)
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 = snow9. 拖放 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。
官方参考
- NVL:https://www.renpy.org/doc/html/nvl_mode.html
- 立绘 Side Image:https://www.renpy.org/doc/html/side_image.html
- 气泡:https://www.renpy.org/doc/html/bubble.html
- 图鉴/音乐室/回放:https://www.renpy.org/doc/html/rooms.html
- 拖放:https://www.renpy.org/doc/html/drag_drop.html
- 精灵:https://www.renpy.org/doc/html/sprites.html
在 GenPy 里怎么做
- 在 GenPy 的代码模式中维护相关 .rpy 文件,先保持语法清晰,再逐步加入本章功能。
- 用故事图谱、变量、校验或演出编辑器把“能运行”提升到“可维护”。
- 导出前结合 Ren'Py Lint 和 GenPy 校验结果,确认脚本、素材和发布路径一致。
推荐继续阅读:
