Skip to content

语言基础 ​

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

学习目标 ​

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

核心语法 ​

  • .rpy
  • indentation
  • strings
  • comments
  • label
  • Character

可运行示例 ​

text
label start:
    e "我在 start 块里。"
    menu:
        "选项 A":
            e "我在选项 A 的块里。"
        "选项 B":
            e "我在选项 B 的块里。"
    e "menu 结束后回到这里。"

教程正文 ​

Ren'Py 脚本语言介于“配置 + 编程”之间:常见叙事用简单语句,复杂逻辑可下沉到 Python。

1. 文件与语句 ​

  • 脚本文件后缀 .rpy,放在 game/ 下,文件名/顺序不影响逻辑(靠 label 跳转)。
  • 一行一条语句。语句分两类:
    • say 语句(对话/旁白):一段带引号的字符串,可前置一个角色变量。
    • 关键字语句:如 scene、show、menu、jump、if、python 等。
text
"这是一句旁白。"
e "这是角色 e 说的话。"
scene bg room
jump chapter2

2. 缩进(block) ​

Ren'Py 用缩进表示从属关系(block),与 Python 一致:

  • 用空格缩进,同一块缩进量必须一致(推荐 4 空格)。
  • 不要用 Tab,混用会报错。
text
label start:
    e "我在 start 块里。"
    menu:
        "选项 A":
            e "我在选项 A 的块里。"
        "选项 B":
            e "我在选项 B 的块里。"
    e "menu 结束后回到这里。"

3. 注释 ​

text
# 井号开头是单行注释,从 # 到行尾都会被忽略
e "你好"  # 也可以写在语句后面

Ren'Py 没有专门的多行注释语法;多行注释通常每行加 #,或在 python: 块里用三引号字符串。

4. 字符串与引号 ​

  • 字符串可用双引号 "..." 或单引号 '...'。
  • 字符串内出现同类引号时用反斜杠转义:"他说\"你好\"。"。
  • 字符串内可用 [变量] 做插值,{标签} 做文本样式(见“文本与文本标签”一章)。
  • 想显示字面量 [ 或 {,写成 [[ 和 {{。
text
$ name = "艾琳"
e "我是 [name],很高兴见到你。"
e "强调:{b}重点内容{/b}。"

5. 关键字语句速览 ​

语句作用详见
define在加载期定义不变的对象(角色、图片等)07
default定义可变量的初值(参与存档)07 / 18
image定义图片名05
scene / show / hide切换背景 / 显示 / 隐藏图像05
with应用转场12
play / stop / queue音频控制09
menu玩家选择06
jump / call / return控制流03
if / elif / else / while条件与循环08
$ / python:内联/块状 Python07
screen / label / transform定义界面 / 标签 / 变换16 / 03 / 11

6. 名称与命名空间 ​

  • 角色、变量、label、image 名都在全局命名空间。
  • 约定俗成:角色变量用短小写(e, m, s),label 用语义化名字(chapter1, bad_ending)。
  • 避免与 Ren'Py 内置名冲突(如 name、menu、config 等谨慎使用)。

7. 一个完整最小示例 ​

text
define e = Character("艾琳")
define m = Character("我", color="#88ccff")

label start:
    scene bg room
    with fade

    show eileen happy at center

    e "欢迎来到 Ren'Py。"
    m "我该说点什么呢?"

    menu:
        "打招呼":
            m "你好!"
            $ friendly = True
        "保持沉默":
            "我什么也没说。"
            $ friendly = False

    if friendly:
        e "你真有礼貌。"
    else:
        e "……气氛有点尴尬。"

    e "再见!"
    return

常见坑 ​

  • 缩进不一致是最常见报错,统一用 4 空格。
  • define 用于不变对象,default 用于会变化且需存档的变量,别混。
  • label/变量名大小写敏感,Start ≠ start。
  • 字符串里要显示 [、{ 记得双写转义。

官方参考 ​

在 GenPy 里怎么做 ​

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

推荐继续阅读:

Built for GenPy creators.