角色回調函數 link
對話中的各種事件發生時,Ren’Py都有能力執行回調函數。
這是透過將 callback 入參傳入 Character()
函數或設置 config.character_callback
和 config.all_character_callbacks
配置項實現的。
調用角色回調函數時傳入唯一的固定位置參數,即發生的事件消息。可能的事件消息包括:
- “begin”
在某個say語句的開頭處調用。
- “show”
顯示每一段對話之前調用。對話可能被文本標籤{w}或{p}分割成多段,沒有那些文本標籤的對話可以理解為1段。
- “show_done”
顯示每一段對話之後調用。
- “slow_done”
在慢速文本顯示完畢後。注意,這個事件可能會發生在“end”後面,在那種情況下對話不會觸發交互行為。
- “end”
在某個say語句的結尾處調用。
調用回調函數時使用以下關鍵字入參:
- interact
如果對話觸發了某個交互行為,則返回True。
- type
角色類型(“nvl”、“adv”、“bubble”等)。
- what
一段文本,將應用到可視組件what上。
- multiple
Character()
的 multiple 參數。
“show”和“slow_done”的回調函數有一些額外的關鍵字參數。
參數:
- start
當前對話段落的開頭。當前對話段落即 what 字串的內容。
- end
當前對話段落的結尾。當前對話段落即 what 字串的內容。
- delay
Ren’Py顯示當前對話段落的暫停時間。若為None則會一直等待玩家點擊。
- last_segment
若當前對話段落是say語句的結尾則返回True,否則返回False。
其他的固定位置入參和額外的關鍵字入參可以加入回調函數中。回調函數用不到的參數將會被忽略。
樣例 link
這個樣例播放“嗶-”代替角色語音,前提是啟用了慢速文本:
init python:
def beepy_voice(event, interact=True, **kwargs):
if not interact:
return
if event == "show_done":
renpy.sound.play("beeps.ogg")
elif event == "slow_done":
renpy.sound.stop()
define pike = Character("克里斯多福·派克", callback=beepy_voice)
label start:
pike "在Talos IV附近逛逛,整整我自己的生意,只要……"