条件语句
本页属于 GenPy Ren'Py 学习路线。教程内容面向 Ren'Py 8.x,并在页面末尾连接到 GenPy 的对应工作流。
学习目标
- 了解“条件语句”在 Ren'Py 项目中的用途。
- 能在一个最小项目里验证本章相关语法或工作流。
- 知道发布前需要检查的常见风险,并能在 GenPy 中继续维护。
核心语法
ifelifelsewhilebreakcontinue
可运行示例
text
default money = 50
label shop:
if money >= 100:
e "你很有钱!"
elif money >= 10:
e "还过得去。"
else:
e "你身无分文。"教程正文
分支与重复逻辑用 if/elif/else 和 while。条件表达式就是 Python 表达式。
1. if / elif / else
text
default money = 50
label shop:
if money >= 100:
e "你很有钱!"
elif money >= 10:
e "还过得去。"
else:
e "你身无分文。"- 条件是任意 Python 布尔表达式:
money >= 10、"剑" in inventory、met and not angry。 - 缩进决定从属块。
2. 条件中的常见表达式
text
if affection > 5 and chapter == 2:
...
if "key" in inventory:
...
if not seen_intro:
...
if flags.get("met_eileen", False):
...3. while 循环
text
$ count = 0
while count < 3:
e "第 [count] 次循环。"
$ count += 1注意:
while里若包含会等待玩家的语句(如 say/menu),每轮都会停顿。 纯计算的循环建议放进python:块,避免逐句交互。
4. python 块里的循环(推荐用于纯计算)
text
python:
total = 0
for i in range(1, 11):
total += i
e "1 到 10 的和是 [total]。"for 只能在 Python 块里用(脚本层没有 for 语句,但有 while)。
5. 用条件控制剧情走向
text
label check_ending:
if affection >= 10:
jump good_ending
elif affection >= 0:
jump normal_ending
else:
jump bad_ending6. 菜单里的条件选项
(详见第 6 章)选项后加 if 控制可见性:
text
menu:
"使用钥匙开门" if "key" in inventory:
jump open_door
"撬锁":
jump pick_lock7. 三元与内联条件(在插值中)
文本插值里也能放表达式(需用 Python 计算后再插值,或用条件提前赋值):
text
$ mood = "开心" if affection > 0 else "冷淡"
e "她看起来很[mood]。"8. 条件与回滚
- 改变量请保证它是
default定义的,回滚才能正确还原。 - 避免在条件里调用有副作用且不可回滚的函数;副作用尽量走存档变量。
常见坑
- 脚本层没有
for/switch;循环用while,复杂遍历进python:块。 while中包含交互语句会逐轮停顿,注意是否符合预期。- 比较字符串/数字类型要一致:
renpy.input返回字符串,需要int(...)转换。 - 用
and/or/not(Python 关键字),不是&&/||。
官方参考
在 GenPy 里怎么做
- 在 GenPy 的代码模式中维护相关 .rpy 文件,先保持语法清晰,再逐步加入本章功能。
- 用故事图谱、变量、校验或演出编辑器把“能运行”提升到“可维护”。
- 导出前结合 Ren'Py Lint 和 GenPy 校验结果,确认脚本、素材和发布路径一致。
推荐继续阅读:
