特殊界面名称
在Ren’Py中总共有两类特殊界面名称。第一类是在Ren’Py脚本语言命令(或者等效的程序)运行时自动显示的部分。另一类是菜单界面。这些界面沿袭管用名称,实现惯用功能,但界面名可以省略或者修改为不需要实际写出来。
在本页内容中,我们会给出一些界面样例。需要意识到的重点是,一些界面必须包含精简的功能,界面系统允许在界面上添加额外的功能。例如,标准的say界面只能显示文本,使用界面系统就很容易添加跳过(skipping)、自动前进(auto-forwar)模式及静音(muting)。
一些特殊界面会使用参数。这些参数可以在界面的作用域(scope)中,以变量的形式访问。
一些界面也还有关联的专属id。专属id会被分配给指定类型的可视组件。其还可以导致特性(property)分配给对应的可视组件,并可以让Ren’Py显示界面的其他部分可以访问这个可视组件。
游戏内界面
当某个Ren’Py语句执行时,这些界面会自动显示。
Say
say 界面在ADV模式对话时,通过say语句被调用。其显示时使用下列参数:
- who
- 发言角色名的文本。
- what
- 发言角色说的内容。
需要使用下列id声明可视组件:
- “who”
- 一个文本组件,显示发言角色名。character对象可以使用入参提供组件样式。
- “what”
- 一个文本组件,显示发言角色说的内容。character对象可以使用入参提供组件样式。 带有该id的可视组件必须被定义 ,因为Ren’Py会使用它继续按自动前进模式的时间,点击继续等。
- “window”
- 一个窗口或者框架。按照习惯其包含who和what文本。character对象可以使用入参提供组件样式。
screen say(who, what):
window id "window":
has vbox
if who:
text who id "who"
text what id "what"
Choice
choice 界面使用menu语句显示游戏内选项。其会使用下列参数:
- items
这是一个菜单入口对象列表,表示菜单中的各个选项。每个菜单入口对象包含以下的字段(field):
-
caption
菜单选项标题字符串。
-
action
当菜单选项被选择时执行的行为。如果这是菜单行为(action)的话,可以为None,且
config.narrator_menu 的值为False。
-
chosen
整个游戏流程中该选项至少被选择过一次,则为True。
-
args
一个元组,包含所以传入菜单选项的固定位置入参。
-
kwargs
一个字典,包含所有传入菜单选项的关键词参数。
另外,传入menu语句的所有入参都在调用对应界面时才真正执行传参。
screen choice(items):
window:
style "menu_window"
vbox:
style "menu"
for i in items:
if i.action:
button:
action i.action
style "menu_choice_button"
text i.caption style "menu_choice"
else:
text i.caption style "menu_caption"
NVL
nvl 界面用于显示NVL模式的对话。其使用下列参数:
- dialogue
NVL层(entry)对象列表。每一个对象对应一行显示的对话。每一层(entry)都有如下的字段(field):
-
current
若是对话的当前行则返回True。对话当前行必须必须使用名为“what”的id来显示文本。
-
who
发言角色名字,如果没有对应的角色则为None。
-
what
发言内容文本。
-
who_id, what_id, window_id
分别对应相关的层(entry)上发言者、对话和窗口的id。
-
who_args, what_args, window_args
发言者、对话和窗口相关的特性(property)。这些字段(field)会自动被应用,前提是上述的id被正确配置。但也可以分开配置使这些字段(field)可用。
-
multiple
如果使用 多角色对话,这就是个具有2个元素的元组。第一个元素是个从1开始的对话语句块(block)编号,第二个参数是multiple语句的对话语句块(block)总数。
- items
- 这是所有会用在
选择界面 中的item列表。如果列表是空的,则菜单就不会显示。
如果 items 不存在,NVL界面通常会给出id为“what”的文本部件(widget)。Ren’Py使用这个文本不见计算自动前进模式时间、点击继续等。(如果使用默认what_id的话,就能启用自动模式。)
Ren’Py 也支持 nvl_choice 界面,这个界面与 nvl 界面使用相同的参数,而且当向用户展示游戏内选项时会使用这些参数作为显示环境设定。
screen nvl(dialogue, items=None):
window:
style "nvl_window"
has vbox:
style "nvl_vbox"
# 显示对话。
for d in dialogue:
window:
id d.window_id
has hbox:
spacing 10
if d.who is not None:
text d.who id d.who_id
text d.what id d.what_id
# 如果存在菜单就显示。
if items:
vbox:
id "menu"
for i in items:
if action:
button:
style "nvl_menu_choice_button"
action i.action
text i.caption style "nvl_menu_choice"
else:
text i.caption style "nvl_dialogue"
Notify
notify 界面被 renpy.notify() 函数用于向用户显示通知消息。其主要用于连接某个transform,以处理整个通知任务。它仅使用一个参数:
- message
- 显示的信息。
默认的notify界面和关联的transform如下:
screen notify(message):
zorder 100
text message at _notify_transform
# 这控制界面第一次显示和隐藏之间的时间。
timer 3.25 action Hide('notify')
transform _notify_transform:
# 这些控制位置
xalign .02 yalign .015
# 这些控制显示隐藏的行为。
on show:
alpha 0
linear .25 alpha 1.0
on hide:
linear .5 alpha 0.0
跳过提示
skip_indicator 界面在“跳过”过程中出现,完成“跳过”后隐藏。其不使用任何参数。
这是一个非常简单的跳过提示界面:
screen skip_indicator():
zorder 100
text _("Skipping")
CTC(点击继续)
ctc 界面会在对话显示完毕,提示用户点击显示更多文本的情况下出现。其可能会使用一个参数。
- arg
- 如果
Character() 对象有一个 ctc 入参,就会被作为第一个固定位置入参传入ctc界面。
这是一个非常简单的ctc界面:
screen ctc(arg=None):
zorder 100
text _("Click to Continue"):
size 12
xalign 0.98
yalign 0.98