ラベルと制御フロー link

label ステートメント link

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

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

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

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

There are two kinds of labels: global and local labels. Global labels live in one global scope shared across all project files and thus should have unique names per game. Local labels logically reside inside scope of the global label they are declared in. To declare a local label, prefix its name with .. For example:

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

The call statement may take arguments, which are processed as described in PEP 3102.

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

return ステートメント link

The return statement pops the top statement off of the call stack, and transfers control to it. If the call stack is empty, the return statement restarts Ren'Py, returning control to the main menu.

If the optional expression is given to return, it is evaluated, and it's result is stored in the _return variable. This variable is dynamically scoped to each context.

特別なラベル link

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

start

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

quit

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

after_load

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

splashscreen

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

before_main_menu

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

main_menu

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

label main_menu:
    return
after_warp
If it is existed, this label is called after a warp but before the warped-to statement executes. please see 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 関数を新しいコンテキストで実行します。その関数から戻るか例外を出力すると、新しいコンテキストを削除して現在のコンテキストに戻ります。一般的に、イベントハンドラー内部から、プレイヤーに情報を表示する必要のある python 関数を呼び出すために使用されます。

コンテキストは(どのスクリーンと画像が表示されるているかを含む)その表示状態と音声システムを維持します。コンテキストから返ると両方が戻ります。

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

この関数で作成されたコンテキストは Ren'Py スクリプトを実行できません。 renpy.jump() のような Ren'Py スクリプトの流れを変える変更をする関数はコンテキスト外で扱われます。 Python 関数ではなく Ren'Py スクリプトを呼び出したいなら、 renpy.call_in_new_context() を代わりに使ってください。

renpy.jump_out_of_context(label) link

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

renpy.seen_label(label) link

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

renpy.set_return_stack(stack) link

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

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