在Ren’Py中,模式(mode)是一种描述交互类型的简练方法。当Ren’Py收到某个模式的报告,用户自定义的回调函数就可以运行。这些回调函数通过调整模式进行下响应,可能会重新配置用户接口。例如,一个从ADV模式切换到NVL模式或进入菜单界面等,可能会触发一个转场(transition)。
模式系统的目标是提供一种强大和具有扩展性的方式,检测和响应这些变化。
下列模式分别对应内建的交互行为:
renpy.pause() 运行时,Ren’Py进入的模式。在一个 pause 语句的暂停时间内,Ren’Py也处于这种模式。当使用 with 语句进入一个转场(transition)时,Ren’Py进入的模式。
注意,在with语句开头,Ren’Py就进入了with模式,而在scene、show和hide语句执行后Ren’Py才会切换模式。
call screen 语句唤起某个界面时,Ren’Py进入的模式。renpy.imagemap() 唤起旧样式的imagemap时,Ren’Py进入的模式。renpy.input() 函数请求文本输入时,Ren’Py进入的模式。其他模式可以通过调用renpy.mode函数进入。
renpy.get_mode() link返回当前模式,如果未定义则返回None。
renpy.mode(mode) link让Ren’Py进入某个模式,如果已经处于这个模式则保持。
config.mode_callbacks 变量包含了一个模式回调函数的列表。当Ren’Py进入某个模式时,就会唤起列表中的模式回调函数。模式回调函数使用两个参数:
注意,当进入的模式就是现在处于的模式时, old_modes 的第一个元素会等于 mode。
当从ADV模式切换到NVL模式时,模式回调函数会触发一个转场(transition),反之亦然。这是Ren’Py内置功能的一部分,不需要显式调用。
init python:
def _nvl_adv_callback(mode, old_modes):
old = old_modes[0]
if config.adv_nvl_transition:
if mode == "nvl" or mode == "nvl_menu":
if old == "say" or old == "menu":
nvl_show(config.adv_nvl_transition)
if config.nvl_adv_transition:
if mode == "say" or mode == "menu":
if old == "nvl" or old == "nvl_menu":
nvl_hide(config.nvl_adv_transition)
config.mode_callbacks.append(_nvl_adv_callback)