模式 link

在Ren’Py中,模式(mode)是一種描述交互類型的簡練方法。當Ren’Py收到某個模式的報告,用戶自訂的回調函數就可以運行。這些回調函數通過調整模式進行下響應,可能會重新配置用戶介面。例如,一個從ADV模式切換到NVL模式或進入菜單界面等,可能會觸發一個轉場(transition)。

模式系統的目標是提供一種強大和具有擴展性的方式,檢測和響應這些變化。

默認模式 link

下列模式分別對應內建的交互行為:

start
當創建一個新的上下文(context)時,比如遊戲開始,Ren’Py就會處於這種模式。Ren’Py從不自動進入這個模式,但在初始化模式列表時包括了start。
say
當ADV模式下say語句執行時,Ren’Py進入的模式。
menu
當ADV模式下menu語句執行時,Ren’Py進入的模式。
nvl
當NVL模式下say語句執行時,Ren’Py進入的模式。
nvl_menu
當NVL模式下menu語句執行時,Ren’Py進入的模式。
pause
renpy.pause() 運行時,Ren’Py進入的模式。在一個 pause 語句的暫停時間內,Ren’Py也處於這種模式。
with

當使用 with 語句進入一個轉場(transition)時,Ren’Py進入的模式。

注意,在with語句開頭,Ren’Py就進入了with模式,而在scene、show和hide語句執行後Ren’Py才會切換模式。

screen
當使用 call screen 語句喚起某個界面時,Ren’Py進入的模式。
imagemap
當使用 renpy.imagemap() 喚起舊樣式的imagemap時,Ren’Py進入的模式。
input
當使用 renpy.input() 函數請求文本輸入時,Ren’Py進入的模式。

其他模式可以透過調用renpy.mode函數進入。

renpy.get_mode() link

返回當前模式,如果未定義則返回None。

renpy.mode(mode) link

讓Ren’Py進入某個模式,如果已經處於這個模式則保持。

模式回調函數 link

config.mode_callbacks 變數包含了一個模式回調函數的列表。當Ren’Py進入某個模式時,就會喚起列表中的模式回調函數。模式回調函數使用兩個參數:

mode
一個字串,表示進入的模式名稱。
old_modes
一個字串列表,表示系統之前曾進入過的所有模式,按時間從近到遠排序。

注意,當進入的模式就是現在處於的模式時, old_modes 的第一個元素會等於 mode

樣例模式回調函數 link

當從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)