多角色对话 link
Ren’Py支持同时显示多个角色的对话。多角色对话使用每行对话结尾的multiple入参唤起。举例:
e "Ren'Py现在支持并行显示多行对话了。" (multiple=2)
l "该死的!我等这个功能好多年了。" (multiple=2)
多角色对话会根据对话后面的 multiple 入参数值决定将多个对话行合并。(如果我们设置multiple=3,就将三个对话块合并。)
多角色对话的运行机制是,使用不同的样式多次显示say界面。每个say界面分别对应某一个角色的对话内容。
关于多角色对话有几条限制:
显示多角色对话时,能触发文本暂停的文本标签(tag),比如{p}和{w}会无效。这是因为每个界面只显示一次,那些标签(tag)需要界面显示多次才能产生效果。
自动前进模式仅在文本的最后一块生效。大部分情况下自动前进都能表现正常,在最后一块文本比其他部分都短的情况下可能会导致问题,比如自动前进过早发生。
extend分句不会生效。(除非用在最后一块文本。)
样式 link
总之,多人对话的运行机制是,使用不同可视组件系统的样式多次显示say界面。使用的样式会根据其对应的对话块(block)编号和对话块总数按顺序重命名。
多角色对话使用的风格名格式是 blockn_multiplem_stylename ,其中 n 是从1开始的对话块(block)编号, m 是同时显示的对话块总数。
在上面的例子中,对话中每个块对应的窗口样式名如下:
block1_multiple2_say_window
block2_multiple2_say_window
这些命名主题用于对话、角色名和角色名框,以及窗口。此处使用了样式的继承功能。我们可以使用的窗口样式有:
- say_window
这个样式用作单个角色对话窗口的通常情况,提供对话窗口的基础功能。
- multiple2_say_window
这个样式可以用于两个对话窗口的common特性(property),像修改背景和减少边缘(margin)和填充(padding)。
- block1_multiple2_say_window
这个样式可以用于两个对话窗口中第一个窗口的位置,比如使用xalign为0.0将窗口靠左对齐。
- block2_multiple2_say_window
类似的,这个样式可以用于第二个窗口的位置,比如xalign设置为1.0将窗口靠右对齐。
多角色say界面 link
为了控制更多要素,还存在 multiple_say 界面。当 multiple_say界面存在时,会代替普通的say界面。它多了第三个入参, multiple 元组。元组的第一个元素是对话块(block)编号,第二个元素是界面的总数。
NVL模式 link
默认情况下,NVL模式从上到下显示多角色文本块(block)。通过修改 nvl界面 可以定制化这个显示方式。NVL界面使用一个入参对象列表,实现界面元素的组织和展现。