label ステートメントは指定された名前にプログラム的な位置を代入します。それらは単に Ren'Py スクリプトや python 関数、スクリーンから呼び出されたり、ジャンプされたりするために存在します。
label sample1:
"Here is 'sample1' label."
label sample2(a="default"):
"Here is 'sample2' label."
"a = [a]"
label ステートメントはそれに関連づけられたブロックを持つでしょう。その場合その labe ステートメントに到達すると制御はそのブロックに入り、そのブロックの終端に到達すると label ステートメントの次のステートメントに移ります。
二種類のラベル global と local があります。 global label はプロジェクトファイルのすべてに渡るグローバルスコープに置かれ、ゲーム毎に固有な名前を持つべきです。local label はそれが宣言されたグローバルラベルのスコープ内部に論理的に配置されます。local label を宣言するには接頭辞 .
を名前につけてください。例:
label global_label:
"Inside a global label.."
label .local_name:
"..resides a local one."
jump .local_name
local label はそれが宣言されたのと同じグローバルラベル内なら直接に、そうでなければグローバルとローカルネームからなるフルネームで参照出来ます。 :
label another_global:
"Now lets jump inside local label located somewhere else."
jump global_label.local_name
label ステートメントは任意でパラメーターのリストを受け取ります。これらのパラメーターは PEP 570 で記述されたとおりに処理されますが、2つの例外があります :
デフォルトパラメーターの値は呼び出し時に評価されます。
変数は静的スコープではなく、動的スコープです。
変数が動的スコープならば、その値はそのラベルに続く return ステートメントまで残ります。基本的にジャンプや前のステートメントから到達するラベルのパラメーターは無効です。パラメーターつきラベルの例として、 call statement を参照してください。
jump ステートメントを使用して指定のラベルに制御を移します。
expression
キーワードがあればそれに続く式が評価され、算出された文字列がジャンプ先のラベル名に使用されます。 expression
キーワードがなければジャンプ先のラベル名は明示的に指定されなければなりません。
call とは異なり、jump は次のステートメントをスタックにプッシュしません。このため、ジャンプ元に戻る方法はありません。:
label loop_start:
e "Oh no! It looks like we're trapped in an infinite loop."
jump loop_start
call ステートメントを使用して指定のラベルに制御を移します。これは同時に次のステートメントをコールスタックにプッシュし、 return ステートメントで制御を call ステートメントの次のステートメントに返せるようにします。
expression
キーワードが与えられると、これに続く式が評価され、得られた文字列をラベルの名前として呼び出します。expression
キーワードが与えられない場合は、呼び出すステートメントの名前を明示的に指定する必要があります。
オプションである from
節が与えられていれば、指定された名前のラベルステートメントをその call ステートメントの直後に続くステートメントとします。ラベルの明示はコールスタックを保存したゲームデータがスクリプトを変更した後にロードされても適切な場所に返れるようにします。
call ステートメントには引数も受け取られ、それらは PEP 448 に記述されたとおりに処理されます。
引数リストつきの call expression を使用するには pass
キーワードが式と引数リストの間に入らなければなりません。そうでなければ引数リストは call ステートメントではなく式の一部と解釈されます。
label start:
e "First, we will call a subroutine."
call subroutine
call subroutine(2)
call expression "sub" + "routine" pass (count=3)
return
# ...
label subroutine(count=1):
e "I came here [count] time(s)."
e "Next, we will return from the subroutine."
return
警告
後でゲームの更新を公開するつもりならば、各 call
ステートメントに対して from
節なしでゲームを公開するのは危険です。そのような節が追加されていないと、 その``call`` を含むファイルを編集すると呼び出されたラベル内で作成されたセーブが壊れる可能性があります。
"Add from clauses to calls" オプションを使用して、ゲームの配布物をビルドするときにその問題を解決できます。
return
ステートメントはコールスタックの一番上のステートメントをポップし、制御をそのステートメントに移します。コールスタックが空の場合、return ステートメントは Ren'Py をリセットしてメインメニューに戻します。
任意の式が return に指定されると、それは評価され、その結果が _return 変数に保存されます。この変数は各コンテキストに対して動的スコープに属します。
以下のラベルは Ren'Py 本体で使用されます。 :
start
デフォルトでは Ren'Py はゲーム開始時にこのラベルにジャンプします。
quit
存在すればこのラベルはユーザーがゲーム終了時に新しいコンテキストで呼び出されます。
after_load
このラベルがあれば、ゲームのロード時に呼び出されます。ゲームが更新されたときにデータを修正するために使用できます。このラベルでデータを変更するなら、 :func:'renpy.block_rollback' を呼び出してプレーヤーがロードポイントを超えてロールバックしてこれらの変更が元に戻らないようにする必要があります。
splashscreen
存在すればこのラベルはゲームが起動されるたときにメインメニューより前に呼び出されます。 スプラッシュスクリーン追加 も参照してください。
before_main_menu
存在すればこのラベルはメインメニューより前に呼び出されます。メインメニューを用意、例えばバックグラウンドでムービーを再生するような特別な場合に使用されます。
main_menu
もし存在すればこのラベルはメインメニューの代わりに呼び出されます。制御を返すと Ren'Py は start
ラベルからゲームを開始します。例えば以下のコードではメインメニューを表示せずに即座にゲームを開始します。
label main_menu:
return
after_warp
存在すればこのラベルはワープ後にワープ先のステートメントが実行される前に呼び出されます。 行ワープ を参照してください。
hide_windows
存在すればこのラベルはプレイヤーが右クリックや H キーででウィンドウを非表示したときに呼び出されます。これが True を返せば、その非表示は (非表示が既に実行された後) キャンセルされ、そうで無ければその非表示が続きます。
renpy.
call_in_new_context
(label, *args, **kwargs) linkこのコードは新しいコンテキストを作成し、新しいコンテキストでそのラベルからコードを実行します。ロールバックは新しいコンテキストでは無効化され、セーブ/ロードは一番上のコンテキストで行われます。
これを使用してインタラクション中に 2 つ目のインタラクションを開始します。
renpy.
get_all_labels
() linkライブラリー内部で使用するために定義されたラベルを含め、プログラムで定義されたすべてのラベルを返します。
renpy.
get_return_stack
() link現在のリターンスタックのリストを返します。リターンスタックはステートメント名のリストです。
ステートメント名は文字列 (ラベル) か不明瞭なタプル ( ラベルのないステートメント ) です。
renpy.
has_label
(name) linkname がそのプログラム内での正しいラベルなら True を、そうでなければ False を返します。
ラベルの存在をチェックするためには文字列であるべきです。ラベルのないステートメントの名前を指定する不明瞭なタプルも可能です。
renpy.
invoke_in_new_context
(callable, *args, **kwargs) link現在のコンテキストをプッシュし、指定された python 関数を新しいコンテキストで実行します。その関数から戻るか例外を出力すると、新しいコンテキストを削除して現在のコンテキストに戻ります。一般的に、イベントハンドラー内部から、プレイヤーに情報を表示する必要のある python 関数を呼び出すために使用されます。
コンテキストは(どのスクリーンと画像が表示されるているかを含む)その表示状態と音声システムを維持します。コンテキストから返ると両方が戻ります。
追加の引数とキーワード引数はその呼び出し可能オブジェクトに渡されます。
この関数で作成されたコンテキストは Ren'Py スクリプトを実行できません。 renpy.jump()
のような Ren'Py スクリプトの流れを変える変更をする関数はコンテキスト外で扱われます。 Python 関数ではなく Ren'Py スクリプトを呼び出したいなら、 renpy.call_in_new_context()
を代わりに使ってください。
renpy.
jump_out_of_context
(label) link現在のコンテキストを終了し、親のコンテキストで指定されたラベルに制御を移動します。
renpy.
mark_label_seen
(label) linkその名前のラベルを現在のユーザーがすでに実行しているものとしてマークします。
renpy.
mark_label_unseen
(label) linkその名前のラベルを現在のユーザーではまだ実行していないものとしてマークします。
renpy.
seen_label
(label) linkその名前のラベルが現在のユーザーに一度でも実行されていると True が、そうでなければ False が返されます。これは例えばシーンギャラリーをアンロックするために使用出来ます。
renpy.
set_return_stack
(stack) link現在のリターンスタックを設定します。リターンスタックはステートメント名のリストです。
ステートメント名は文字列 (ラベル) か不明瞭なタプル ( ラベルのないステートメント ) です。