ラベルと制御フロー link

label ステートメント link

label ステートメントは指定された名前にプログラム的な位置を代入します。それらは単にスクリプトコードや Ren'Py の設定から呼び出されたり、ジャンプされたりするために存在します。

label sample1:
    "Here is 'sample1' label."

label sample2(a="default"):
    "Here is 'sample2' label."
    "a = [a]"

label ステートメントはそれに関連づけられたブロックを持つでしょう。その場合その labe ステートメントに到達すると制御はそのブロックに入り、そのブロックの終端に到達すると label ステートメントの次のステートメントに移ります。

二種類のラベル globallocal があります。 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 3102 で記述されたとおりに処理されますが、2つの例外があります :

  • デフォルト引数の値は呼び出し時に評価されます。

  • 変数は静的スコープではなく、動的スコープです。

jump ステートメント link

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 ステートメント link

call ステートメントは指定されたラベルに制御を移すために使用されます。これは同時に次のステートメントをコールスタックにプッシュし、 return ステートメントで制御を call ステートメントの次のステートメントに返せるようにします。

expression キーワードが与えられると、これに続く式が評価され、得られた文字列をラベルの名前として呼び出します。expression キーワードを与えない場合は、呼び出すステートメントの名前を明示的に指定する必要があります。

任意の from 節が存在すれば指定された名前のラベルステートメントをその call ステートメントの直後に続くステートメントとします。明白なラベルはコールスタックを保存したゲームが、変更したスクリプトをロードしたときに適切な位置に返れることを保証するのに役立ちます。

e "First, we will call a subroutine."

call subroutine

call subroutine(2)

call expression "subroutine" pass (count=3)

# ...

label subroutine(count=1):

    e "I came here [count] time(s)."
    e "Next, we will return from the subroutine."

    return

call ステートメントは引数を取ることもでき、それらは PEP 3102 に記述されたとおりに処理されます。

引数リストつきの call expression を使用するには pass キーワードが式と引数リストの間に入らなければなりません。そうでなければ引数リストは call ステートメントではなく式の一部と解釈されます。

return ステートメント link

return ステートメントはコールスタックの一番上のステートメントをポップし、制御をそのステートメントに移します。コールスタックが空の場合、return ステートメントは Ren'Py を再起動し、メインメニューに戻ります。

任意の式が return に指定されると、それは評価され、その結果が _return 変数に保存されます。この変数は各コンテキストに対して動的スコープに属します。

特別なラベル link

以下のラベルは Ren'Py 本体で使用されます。 :

start

デフォルトでは Ren'Py はゲーム開始時にこのラベルにジャンプします。

quit

存在すればこのラベルはユーザーがゲーム終了時に新しいコンテキストで呼び出されます。

after_load

存在すればこのラベルはゲームがロードされると呼び出されます。ゲーム更新時にデータを修正するために使用可能です。

splashscreen

存在すればこのラベルはゲームが起動されるとメインメニューより前に呼び出されます。

before_main_menu

存在すればこのラベルはメインメニューより前に呼び出されます。メインメニューを用意、例えばバックグラウンドでムービーを再生するような特別な場合に使用されます。

main_menu

もし存在すればこのラベルはメインメニューの代わりに呼び出されます。制御を返すと Ren'Py は start ラベルからゲームを開始します。例えば以下のコードではメインメニューを表示せずに即座にゲームを開始します。

label main_menu:
    return
after_warp

存在すればこのラベルはワープ後にワープ先のステートメントが実行される前に呼び出されます。 Warping to a line を参照してください。

ラベルと制御フロー関数 link

renpy.call_in_new_context(label, *args, **kwargs) link

このコードは新しいコンテキストを作成し、新しいコンテキストでそのラベルからコードを実行します。ロールバックは新しいコンテキストでは無効化されます。 (実際は、元のコンテキストに戻されるだけです。)

これを使用してインタラクション中に 2 つ目のインタラクションを開始します。

renpy.get_all_labels() link

ライブラリー内部で使用するために定義されたラベルを含め、プログラムで定義されたすべてのラベルを返します。

renpy.get_return_stack() link

現在のリターンスタックのリストを返します。リターンスタックはステートメント名のリストです。

ステートメント名は文字列 (ラベル) か不明瞭なタプル ( ラベルのないステートメント ) です。

renpy.has_label(name) link

name がそのプログラム内での正しいラベルなら True を、そうでなければ False を返します。

name

ラベルの存在をチェックするためには文字列であるべきです。ラベルのないステートメントの名前は指定する不明瞭なタプルも可能です。

renpy.invoke_in_new_context(callable, *args, **kwargs) link

現在のコンテキストをプッシュし、指定された python 関数を新しいコンテキストで実行します。その関数から戻るか例外を出力すると、新しいコンテキストを削除して現在のコンテキストに戻ります。

追加の引数とキーワード引数はその呼び出し可能オブジェクトに渡されます。

作成されたコンテキストは Ren'Py コードを実行出来ないことに注意してください。 ( renpy.jump で生成されるような ) Ren'Py コードの制御フローを変更する例外はこのコンテキストを停止し、さらに上位のコンテキストによって処理されます。

関数から Ren'Py コードを実行したいなら renpy.call_in_new_contex で呼び出してください。

これを使用してインタラクション中に 2 つ目のインタラクションを開始します。

renpy.jump_out_of_context(label) link

現在のコンテキストを終了し、親のコンテキストで指定されたラベルに制御を移動します。

renpy.seen_label(label) link

その名前のラベルが現在のユーザーに一度でも実行されていると True が、そうでなければ False が返されます。これは例えばシーンギャラリーをアンロックするために使用出来ます。

renpy.set_return_stack(stack) link

現在のリターンスタックを設定します。リターンスタックはステートメント名のリストです。

ステートメント名は文字列 (ラベル) か不明瞭なタプル ( ラベルのないステートメント ) です。