特殊界面名称 link
在Ren’Py中总共有两类特殊界面名称。第一类是在Ren’Py脚本语言命令(或者等效的程序)运行时自动显示的部分。另一类是菜单界面。这些界面沿袭管用名称,实现惯用功能,但界面名可以省略或者修改为不需要实际写出来。
在本页内容中,我们会给出一些界面样例。需要意识到的重点是,一些界面必须包含精简的功能,界面系统允许在界面上添加额外的功能。例如,标准的say界面只能显示文本,使用界面系统就很容易添加跳过(skipping)、自动前进(auto-forwar)模式及静音(muting)。
一些特殊界面会使用参数。这些参数可以在界面的作用域(scope)中,以变量的形式访问。
一些界面也还有关联的专属id。专属id会被分配给指定类型的可视组件。其还可以导致特性(property)分配给对应的可视组件,并可以让Ren’Py显示界面的其他部分可以访问这个可视组件。
游戏内界面 link
当某个Ren’Py语句执行时,这些界面会自动显示。
Say link
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 link
choice
界面使用menu语句显示游戏内选项。其会使用下列参数:
- items
这是一个菜单入口对象列表,表示菜单中的各个选项。每个菜单入口对象包含以下的字段(field):
菜单选项标题字符串。
- action link
当菜单选项被选择时执行的行为。如果这是菜单行为(action)的话,可以为None,且
config.narrator_menu
的值为False。
- chosen link
整个游戏流程中该选项至少被选择过一次,则为True。
- args link
一个元组,包含所以传入菜单选项的固定位置入参。
- kwargs link
一个字典,包含所有传入菜单选项的关键词参数。
以上内容和行为,都会在menu语句接受后失效。
另外,传入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"
Input link
input
界面用于显示 renpy.input()
。其使用一项参数。
- prompt
应用于renpy.input的提示文本。
通常使用下面的id定义一个可视组件:
- “input”
一个必须存在的输入组件。其所有参数都会应用于renpy.input,所以必须存在。
screen input(prompt):
window:
has vbox
text prompt
input id "input"
NVL link
nvl
界面用于显示NVL模式的对话。其使用下列参数:
- dialogue
NVL层(entry)对象列表。每一个对象对应一行显示的对话。每一层(entry)都有如下的字段(field):
- current link
若是对话的当前行则返回True。对话当前行必须必须使用名为“what”的id来显示文本。
- who link
发言角色名字,如果没有对应的角色则为None。
- what link
发言内容文本。
- who_id, what_id, window_id
分别对应相关的层(entry)上发言者、对话和窗口的id。
- who_args, what_args, window_args
发言者、对话和窗口相关的特性(property)。这些字段(field)会自动被应用,前提是上述的id被正确配置。但也可以分开配置使这些字段(field)可用。
- 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 link
notify
界面被 renpy.notify()
函数用于向用户显示通知消息。其主要用于连接某个transform,以处理整个通知任务。它仅使用一个参数:
- message
显示的信息。
默认的notify界面和关联的transform如下:
screen notify(message):
zorder 100
text "[message!tq]" 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
跳过提示 link
skip_indicator
界面在“跳过”过程中出现,完成“跳过”后隐藏。其不使用任何参数。
这是一个非常简单的跳过提示界面:
screen skip_indicator():
zorder 100
text _("Skipping")
CTC(点击继续) link
ctc
界面会在对话显示完毕,提示用户点击显示更多文本的情况下出现。其可能会使用一个参数。
- arg
如果
Character()
对象有一个 ctc 入参,就会被作为第一个固定位置入参传入ctc界面。
这是一个非常简单的ctc界面:
screen ctc(arg=None):
zorder 100
text _("Click to Continue"):
size 12
xalign 0.98
yalign 0.98
add arg
text _("点击继续"):
size 12