キャラクターコールバック link
Ren'Py は台詞中の様々なイベント発生時にコールバックを実行する機能があります。これは Character()
に callback を指定するか、 config.character_callback
または config.all_character_callbacks
を設定して行なわれます。
キャラクターコールバックは一つの位置引数である発生したイベントで呼び出されます。起こりうるイベントは以下のものです。 :
- "begin"
say ステートメントの開始時に呼び出されます。
- "show"
台詞の各セグメント表示前に呼ばれます。台詞は {w} や {p} テキストタグで複数のセグメントに区切られている場合がありますが、少なくとも 1 つのセグメントがあります。
- "slow_done"
低速テキストの表示が完了すると呼び出されます。このイベントは "end" の後に発生するかもしれませんが、その場合台詞はインタラクションを起こさないことに注意してください。
- "end"
say ステートメントの終りに呼び出されます。
キーワード引数つきで呼び出されます。 :
- interact
台詞がインタラクションを起こすなら True です。
- type
キャラクターの種類 (例: "nvl", "adv", "balloon")。
- what
what displayable に提供されるテキスト。
"show" と "slow_done" コールバックにも追加のキーワード引数が指定されます :
- start
what 文字列の台詞中の現在のセグメントの開始位置です。
- end
what 文字列の台詞中の現在のセグメントの終了位置です。
- delay
台詞中のの現在のセグメントが表示された後に Ren'Py が一時停止する時間です。プレイヤーがクリックするまで 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("Christopher Pike", callback=beepy_voice)
label start:
pike "So, hanging out on Talos IV, minding my own business, when..."
これは特定のキャラクターに対して一般的なコールバックをどう指定するかの例です。
init python:
import functools
def boopy_voice(event, interact=True, boopfile="normal_boop.ogg", **kwargs):
if not interact:
return
if event == "show_done":
renpy.sound.play(boopfile)
elif event == "slow_done":
renpy.sound.stop()
define nagata = Character("Naomi", callback=functools.partial(boopy_voice, boopfile="belter_boop.ogg"))
define chrisjen = Character("Chrisjen", callback=boopy_voice)