模式 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)