スクリーンとスクリーン言語 link

Ren'Py のゲームを見ると、ゲームを画像とユーザーインターフェイスの2つの部分に分割できることに気づくでしょう。画像は scene、show、hide ステートメントを使ってユーザーに表示し、一般には進行中のストーリーの一部となっています。それ以外の部分はユーザーインターフェイスの一部で、スクリーンを使ってカスタマイズします。

スクリーンは4つの方法で表示できます:

  • スクリプトのステートメントが実行されるときに暗黙的に表示する。例えば、say ステートメントが実行されると、 say スクリーンが表示されます。

  • 自動的に表示する。例えば Ren'Py はゲーム開始時やユーザーがメインメニューに戻るとき、 main_menu スクリーンを表示します。

  • ボタン、マウスのボタン、キーボードのキーによるアクションで表示する。デフォルトでは、ユーザーが右クリックするか、エスケープキーが押された時に save スクリーンが表示されます。他にも、スクリーン上にボタンを定義して save スクリーンを表示も可能です。

  • 明示的に、ステートメントを使ってスクリーンを表示する。

一度に複数のスクリーンを表示できます。

スクリーンには主に2つの機能があります。1つはユーザーへの情報掲示です。情報はテキスト、バー、画像を使って示せます。ゲームのプレイにおいて、一部の情報のこのような形での掲示は重要です。 say スクリーンで例を挙げると、これを使用してキャラクター名と彼女が話している内容を含んだダイアログをユーザーに表示します。

他にスクリーンはユーザーからの入力を受け付けてゲームに反映できます。ボタンやバーを使ってアクションを起こしたり値を調整したりできます。Ren'Py には事前に定義されているアクションのプールがあり、ゲームを進められるようにしたり、設定を調整したり、ゲームをロード・セーブしたり、その他多数のアクションを発生させたりできます。ゲーム製作者も新しいアクションを Python で書けます。

スクリーンはゲームがインタラクションを開始した時、及びインタラクションが再開されるたびに更新されます。with None ステートメントはインタラクションを発生させず、スクリーンを更新させないので注意してください。

スクリーンはそれに関連付けられたスコープを持ち、変数に値を与えます。スクリーンから変数にアクセスされると最初にそのスコープ内を参照し、次にグローバルスコープを参照します。

スクリーンのコードはスクリーン外への副作用を起こしてはいけません Ren'Py はスクリーンが最初に表示される前に画像予測処理の一部として必要なら何度もスクリーンのコードを実行します。結果としてスクリーンのコードが副作用を持つなら、それが何回実行されるかはわかりません。

スクリーン内でのPython のジェネレーターの使用は予想外な結果になるかもしれません これは Python インタプリタがスクリーンコンテンツ内で使用される python コードをコンパイルする方法による問題に由来します。スクリーンから呼び出される Python 関数ではジェネレーターは使用可能ですが、スクリーン自体ではできません。

スクリーン言語 link

スクリーン言語はほとんどが表示するスクリーンを宣言する方法であり、新しい displayable の宣言、スクリーンへの displayable の追加、ステートメントを制御するステートメントで構成されます。

ここにスクリーンの例があります。

screen say(who, what):
    window id "window":
        vbox:
            spacing 10

            text who id "who"
            text what id "what"

この最初の行は screen ステートメントで、スクリーンを宣言するために使用される Ren'Py ステートメントです。スクリーンの名前は say なので、これは台詞を表示するために使用されるスクリーンです。 2 つのパラメーター who, what を受け取ります。

このスクリーンには「 window 」の id を持つウィンドウがあります。このウィンドウは縦長の箱を持ち、その中に 10 ピクセルの空白を含みます。さらにその箱には二つのテキスト用の領域があり、一つは話し手の名前、もう一つは話している内容を表示するものです。

スクリーン言語の構文 link

ほとんどのスクリーン言語は共通の構文を持ちます ( 制御用ステートメントのいくつかは違う構文を持ちますが )。 ステートメントはステートメントを導入するキーワードで行の最初から始まります。

ステートメントがパラメーターを受け取るなら、キーワードの直後に続きます。パラメーターはスペースで区切られた単純式で、そうでないなら記載します。

位置パラメーターの後にはプロパティーリストが続きます。プロパティーはプロパティーの名前とそれに続くそのプロパティーの値で構成されます。プロパティーの値は特に記載がなければ単純式です。プロパティーリストはスペースで区切られた一連のプロパティーです。

ステートメントがコロン : で終るとその後にブロックが続きます。ブロックの各行は以下の二つのどちらかです。 :

  • プロパティーリスト

  • スクリーン言語のステートメント

screen ステートメント link

screen ステートメントは新しいスクリーンを宣言するための Ren'Py のスクリプト言語の一つで、スクリーン言語共通の文法で解釈されます。

パラメーターを一つ受け取り、それはスクリーンの名前です。これは名前であって、式ではありません。以下のプロパティーも受け取ります。 :

modal

True ならそのスクリーンはモーダルです。モーダルなスクリーンはデフォルトのキーマップを除いて、ユーザーがその下にある displayable に作用できないようにします。これはゲーム開始時に一度評価されます。

sensitive

ボタンが有効かどうかを決定する式です。この式はインテラクション毎に少なくとも一回評価されます。

tag

式ではなく名前として解釈されます。これはこのスクリーンと関連づけられるタグを指定します。スクリーンの表示は同じタグの他のスクリーンを置き換えます。これを使用して一つのコンテキストには同時に一つのメニューのスクリーンのみが表示されるようにできます。

zorder

これはスクリーンがどれぐらいユーザーに近いかを制御します。数字が大きいほどスクリーンはユーザーの近くに表示されます。デフォルトでは 0 です。

variant

与えられるならこれは定義されるスクリーン variant 名の文字列または文字列のリストです。 スクリーン variant を参照してください。

style_prefix

後述のように このスクリーンの子のスタイルに接頭辞を与える文字列です。

layer

そのスクリーンが表示されるデフォルトのレイヤー名の文字列です。

roll_forward

True なら、そのスクリーンが call screen ステートメントで呼び出されたときロールフォワードが有効化されます。 False なら無効、 None または未指定ならば config.call_screen_roll_forward の値が使用されます。

call screen ステートメントからロールフォワードする場合、戻り値やターミナルジャンプは保持されますが、その他の副作用は発生しません。つまり、スクリーンが Jump()Return() アクションのみで構成されている場合には、 roll_forward を有効しても安全です。その他のアクションは副作用を持つかもしれませんが、 roll_forward 中は発生しません。

screen hello_world():
     tag example
     zorder 1
     modal False

     text "Hello, World."

スクリーンはパラメーターリストも受け取れます。

screen center_text(s, size=42):
     text s size size

もしスクリーンにパラメータがなくても空の括弧を与えるべきです。他のスクリーンが括弧のないスクリーンを use で使用したときの動作の違いは use ステートメント に関するセクションで説明されています。他のスクリーンが use で使用しなくても、そのスクリーンに括弧を与えないと、 Ren'Pyの内部で動作する方法において、純粋に非効率になります。パラメータに関する スクリーン言語の最適化 セクションを参照してください。

ユーザーインターフェイス・ステートメント link

ユーザーインターフェイスステートメントは displayable を作成してそれをスクリーンか、これを含めるdisplayable に追加します。ユーザーに情報を表示してゲームに作用したり、ゲームが様々なイベントに反応できるようにします。

すべてのユーザーインターフェイスステートメントは以下の共通のプロパティーを受け取ります。 :

at

これは transform または transform のリスト、無名の transform ( at 節で直接定義された transform )です。

transform hello_t:
    align (0.7, 0.5) alpha 0.0
    linear 0.5 alpha 1.0

screen hello_title():
    text "Hello." at hello_t
    text "Hello.":
        at transform:
            align (0.2, 0.5) alpha 0.0
            linear 0.5 alpha 1.0

この transform を使用してこの displayable をラップします。show や hide, replace, replaced の外部イベントは直接スクリーンに加えられた場合のみ がtransform に送られます。

例えば vbox に transform が適用されて、直接スクリーンに追加されているとイベントはその transform に送られます。しかしある transform が vbox に追加されているテキストボタンに適用されていると、この第二の transform にはイベントが送られません。

default_focus

True を与えるとその displayable はデフォルトでフォーカスを持つようになります。複数の displayable がこれを持つときは、その値が比較されて最大のものをもつ displayable がデフォルトフォーカスを持ちます。

デフォルトフォーカスは最後のインタラクションがマウスクリックやマウスの動き、タッチでないときのみ使用されます。

id

ユーザーインターフェイスステートメント用の識別子です。スクリーンが表示されるときに指定された id を持つ displayable に適切な値が提供されます。いくつかのスクリーンでは指定された id を持つ displayable 作成が必要とされます。

デフォルトでは id は自動的に生成されます。

style

この displayable に適用されるスタイルの名前です。そのスタイルはスタイルプロパティーにデフォルトの値を与えます。

style_prefix

より限定的なスタイルやスタイル接頭辞がこの displayable とその子になければ、そのすべての子のスタイルに接頭辞を与えます

スタイル名はスタイル接頭辞とアンダースコア、スタイル接尾辞を繋げて作られます。スタイル接尾辞は style_suffix から指定されるか、 displayable によって決定されます。

例えば vbox がスタイル接頭辞「 pref 」を持っていると、 vbox にはスタイル「 pref_vbox 」が指定されます。より限定的なスタイルやスタイル接頭辞が指定されていなければ、その vbox 内のボタンはスタイル「 pref_button 」を持ちます。

このようにアクセスされるスタイルは、もしなければ作成されます。接頭辞を None に設定するとこの displayable とその子から接頭辞がなくなります。

style_group

style_prefix のエイリアスで、古いバージョンの Ren'Py で使用されます。

style_suffix

style_prefix と結合してスタイル名になる接尾辞を指定します。これが "small_button" でスタイル接頭辞が "pref" なら、スタイルは "pref_small_button" が使用されます。

スタイル接頭辞がなければ、これはスタイル名が直接使用されます。スタイル接尾辞は単独の displayable のみに適用され、 displayable の子には適用されません。

focus

文字列か整数を受け取って displayable にフォーカス用の名前を与えます。Ren'Py はインタラクションの開始時にフォーカスを与える displayable を決定するとき、フォーカスの名前の間に構造的な類似点を探します。例えばある box にフォーカス名が与えられていてその box の三つ目のボタンがインタラクションの最後にフォーカスを所得していれば、同じフォーカス名を持つ box の三つ目のボタンが次のインタラクションの開始時にハイライトされるます。

tooltip

tooltip をこの dispalyable に代入します。displayable がフォーカスを得ると、このプロパティーの値が GetTooltip() 関数から利用可能になります。詳細は Tooltip を参照してください。

tooltip に渡されるオブジェクトは等号をサポートしなければなりません。そうでなければ、無限ループが発生します。

arguments

displayable に与えられる追加の位置引数のタプルやリストです。

properties

displayable に与えられる追加のプロパティーを含む辞書です。

多くのユーザーインターフェイスステートメントはスタイルプロパティーや transform プロパティーの類いを受け取ります。これらのプロパティーには対応するスタイル接頭辞を持たせて、いつそれらが適用されるか決められます。例えばテキストに hover_size プロパティーが与えられるとそれはテキストの上にマウスがあるときのテキストの大きさを設定します

ユーザーインターフェースステートメントは as 節を受け取り、それは引用符なしで変数名を受け取ります。ステートメントが作成する displayable がその変数に代入されます(the drag and drop documentation で例が見られます)。

Bar link

データを閲覧したり調整するための水平方向のバーを作成します。以下のプロパティーを受け取ります。

value

バーの現在の値です。これは bar value オブジェクトか数字になります。

range

バーの最大値です。これは value が数字なら必要です。

adjustment

このバーを調整する ui.adjustment() オブジェクトです。

changed

与えるならこれは python 関数であるべきです。関数は adjustment が変更されるとその adjustment の value を引数に呼び出されます。

hovered

バーがフォーカスを所得したときのアクションです。

unhovered

バーがフォーカスを失うときのアクションです。

released

バーが離されると実行されるアクションです。これはバーが変化していなくても実行されます。

valueadjustment のどちらかは与えられなければなりません。さらにこの機能は以下を受け取ります。 :

これは子は受け取りません。

screen volume_controls():
    frame:
        has vbox

        bar value Preference("sound volume") released Play("sound", "audio/sample_sound.ogg")
        bar value Preference("music volume")
        bar value Preference("voice volume")

Button link

スクリーンのあるエリアを、アクティベートしてアクションを実行できるようにします。ボタンはパラメーターを受け取らず以下のプロパティーを受け取ります。

action

ボタンがアクティベートされると実行するアクションです。ボタンはクリックされるか、プレイヤーが選択してキーボードのエンターを押すかするとアクティベートされます。これは sensitive がなければボタンが有効かどうかの、 selected がなければ選択されているかどうかの制御もします。

alternate

ボタンが代替方法でアクティベートされると実行される代替アクションです。代替方法はプレイヤーがマウスベースのプラットフォームでボタン上で右クリックするか、タッチベースのプラットフォームで長押しすると発生します。

hovered

ボタンがフォーカスを所得するときのアクションです。

unhovered

ボタンがフォーカスを失うときのアクションです。

selected

ボタンが選択されているかどうかを決定する式です。この式はインテラクション毎に少なくとも一回評価されます。 指定されなければ、アクションが選択状態決定に使用されます。

sensitive

ボタンが有効かどうかを決定する式です。この式はインテラクション毎に少なくとも一回評価されます。 指定されなければ、アクションが有効無効決定に使用されます。

keysym

押すとこのボタンのアクションを実行するキーボードのキーを表わす キーシンボル の文字列です。

alternate_keysym

押すとこのボタンの代替アクションを実行するキーボードのキーを表わす keysym の文字列です。

以下も受け取ります。 :

これは子を一つ受け取ります。 ゼロまたは二つ以上の子が指定されるとそれらは暗黙のうちに fixed に追加され、それがボタンに追加されます。

Dismiss link

dismiss ステートメントは、非常に特殊な dismiss displayable を作成します。これは他の displayable にフォーカスがないときにフォーカスを獲得し、それがアクティベートされたときにアクションを実行します。この点では、say ステートメントの動作と非常によく似ています。

これはめったに使用されず、主にポップアップ ウィンドウのように、プレイヤーがモーダルフレームの外側をクリックすると、モーダルフレームが解除されるようにするために使用されます。

これは以下のプロパティーを受け取ります。 :

action

dismiss がアクティベートされたときに処理されるアクションです。このプロパティーは必ず必要です。

modal

dimiss はデフォルトではモーダルであり、その「後ろ」の displayable によってイベントが処理されるのを防ぎます。

以下も受け取ります。 :

ここに dismiss の使用例があります。

screen dismiss_test():

    dismiss action Return()

    frame:
        modal True

        align (.5, .3)
        padding (20, 20)

        has vbox

        text "This is a very important message.":
            xalign 0.5
            text_align 0.5

        # Dismiss can be confusing on its own, so we'll add a button as well.
        textbutton "Dismiss":
            xalign 0.5
            action Return()

dismiss と nearrect の組み合わせの使用方法も参照してください。

Fixed link

これは子を追加可能な領域を作成します。デフォルトでは fixed は利用可能な領域をすべて使用しますが、 xmaximumymaximum プロパティーを使用すればこれを変更できます。

子はそれぞれの位置スタイルプロパティーに従って配置されます。適切に位置が指定されていないと、これらは重なり合ってしまうかもしれません。

fixed ステートメントはパラメーターは受け取らず、以下のプロパティーを受け取ります。 :

これは fixed に追加されるすべての子を受け取ります。

fixed displayable を明示的に作成する必要はほとんどありません。各スクリーンは fixed displayable に含まれており、多くのスクリーン言語は二つ以上の子を持つと自動的に fixed を生成します。

screen ask_are_you_sure:
    fixed:
         text "Are you sure?" xalign 0.5 yalign 0.3
         textbutton "Yes" xalign 0.33 yalign 0.5 action Return(True)
         textbutton "No" xalign 0.66 yalign 0.5 action Return(False)

Frame link

frame はユーザーインターフェイスを表示するための背景を含むウィンドウで、以下のプロパティーを受け取ります。 :

これは一つの子を受け取ります。 0 か 2 以上の子が指定されると、それらを含めるために fixed が作成されます。

screen test_frame():
    frame:
        xpadding 10
        ypadding 10
        xalign 0.5
        yalign 0.5

        vbox:
            text "Display"
            null height 10
            textbutton "Fullscreen" action Preference("display", "fullscreen")
            textbutton "Window" action Preference("display", "window")

Grid link

これはその子をグリッドに表示します。各子には最大のサイズの子と同じサイズの領域が与えられます。

二つのパラメーターを受け取ります。最初の要素はグリッドの縦の列の数で、第二要素はグリッドの横の列の数です。以下のプロパティーを受け取ります。 :

transpose

デフォルトは False で、横の列が縦の列より先に埋められます。 True なら縦の列が横の列より先に埋められます。

以下も受け取ります。 :

これには縦x横だけの子が指定される必要があり、違う数の子が指定されるとエラーになります。

screen grid_test:
     grid 2 3:
         text "Top-Left"
         text "Top-Right"

         text "Center-Left"
         text "Center-Right"

         text "Bottom-Left"
         text "Bottom-Right"

Hbox link

これはその子を透明な横長の箱に左から見に並べて表示します。これはパラメーターを受け取らず、以下のプロパティーを受け取ります。 :

UI displayable の子はボックスに追加されます。

screen hbox_text():
    hbox:
         text "Left"
         text "Right"

Imagebutton link

その上にマウスがあると状態が変化する画像で構成されるボタンを作成します。これはパラメーターを受け取らず、以下のプロパティーを受け取ります。 :

auto

このボタンに使用する画像を自動的に定義するために使用されます。これは %s を含む文字列であるべきです。これが指定されて、画像のプロパティーの一部が省略されていると %s をそのプロパティーの名前で置き換えて、その値をそのプロパティーのデフォルトとして使用します。

例えば auto が "button_%s.png" で idle が省略されると、 idle はデフォルトで "button_idle.png" になります。同様に auto が "button %s" なら button idle 画像が使用されます。

auto の動作は config.imagemap_auto_function を変更してカスタマイズできます。

insensitive

ボタンが無効の時使用される画像です。

idle

ボタンがフォーカスを持っていない時使用される画像です。

hover

ボタンがフォーカスを持っている時使用される画像です。

selected_idle

ボタンが選択されアイドル状態の時使用される画像です。

selected_hover

ボタンが選択されフォーカスを持っている状態の時使用される画像です。

action

ボタンがアクティベートされると実行されるアクションです。これは sensitive がなければボタンが有効かどうかの、 selected がなければ選択されているかどうかの制御もします。

alternate

ボタンが代替方法でアクティベートされると実行される代替アクションです。代替方法はプレイヤーがマウスベースのプラットフォームでボタン上で右クリックするか、タッチベースのプラットフォームで長押しすると発生します。

hovered

ボタンがフォーカスを所得するときのアクションです。

unhovered

ボタンがフォーカスを失うときのアクションです。

selected

ボタンが選択されているかどうかを決定する式です。この式はインテラクション毎に少なくとも一回評価されます。 指定されなければ、アクションが選択状態決定に使用されます。

sensitive

ボタンが有効かどうかを決定する式です。この式はインテラクション毎に少なくとも一回評価されます。 指定されなければ、アクションが有効無効決定に使用されます。

keysym

押すとこのボタンのアクションを実行するキーボードのキーを表わす キーシンボル の文字列です。

alternate_keysym

押すとこのボタンの代替アクションを実行するキーボードのキーを表わす keysym の文字列です。

以下も受け取ります。 :

これは子を受け取りません。

screen gui_game_menu():
     vbox xalign 1.0 yalign 1.0:
          imagebutton auto "save_%s.png" action ShowMenu('save')
          imagebutton auto "prefs_%s.png" action ShowMenu('preferences')
          imagebutton auto "skip_%s.png" action Skip()
          imagebutton auto "afm_%s.png" action Preference("auto-forward mode", "toggle")

Input link

テキスト入力をする領域を作成し、ユーザーがテキストを入力できるようにします。ユーザーが Enter を押すと、テキストがインタラクションから返されます (call screen からスクリーンを呼び出したときは _return 変数に結果が代入されます) 。

Android や ウェブプラットフォームではサポートするライブラリーの制限により、 input Displayable はアルファベット文字に制限されます(訳注 こちら にカナ漢字変換対応のスクリーンキーボードを用意しました。)。

input ステートメントはパラメーターを受け取らず、以下のプロパティーを受け取ります。 :

value

この input が使用する input value オブジェクトです。 InputValue オブジェクトはデフォルト値、テキスト変更、エンター押下時の動作、テキストがデフォルトで変更可能かどうかを決定します。

これは defaultchanged と同時に指定してはいけません。

default

入力されるデフォルトのテキストです。

length

入力されるテキストの最大の長さです。

pixel_width

入力の最大ピクセル幅です。入力した文字がこの幅を越えると、そのキー入力は無視されます。

allow

入力できる文字を含む文字列です (デフォルトではすべての文字が許可されます )。

exclude

入力出来ない文字を含む文字列です。 (デフォルトでは「{}」です。 )

copypaste

True なら、この入力へのコピーとペーストが可能になります(デフォルトでは無効です)。

prefix

ユーザーが入力したテキストの先頭に追加される文字列です。

suffix

ユーザーが入力したテキストの末尾に追加される文字列です。

changed

ユーザーが入力した文字列を引数に、文字列が変更したときに呼ばれる python 関数です。

mask

テキストに表示される各文字を置き換える文字列です。これはパスワードのマスクに使用されます。

caret_blink

False またはデフォルトキャレットの点滅期間です。 config.input_caret_blink を上書きします。

以下も受け取ります。 :

これは子を受け取りません。

screen input_screen():
    window:
        has vbox

        text "Enter your name."
        input default "Joseph P. Blow, ESQ."

Key link

これはあるキー、または指定したリストのどれかのキーが押されるとあるアクションを実行するキーバインドを作成します。 キーはここではジョイスティックやマウスイベントも含む大まかな意味で使用されています。

key はパラメーターを一つ受け取り、それは関連づけるキーの文字列です。利用可能なキーについては キーマップのカスタマイズ の章を参照してください。これは1つのプロパティーを受け取ります:

action

これはキーが押されると実行されるアクションを与えます。このプロパティーは必ず必要です。

capture

デフォルトでは True で、そのイベントは捕捉され、他の Displayable には渡されません。 False かつアクションがインタラクションを終えなければ、そのイベントは他の Displayable に渡されます。

これは子を受け取りません。

screen keymap_screen():
    key "game_menu" action ShowMenu('save')
    key "p" action ShowMenu('preferences')
    key ["s", "w"] action Screenshot()

Label link

ラベルスタイルのウィンドウを作成し、その内側にテキストを置きます。同時にこの連携はフレーム内部にラベルを貼るために使用されます。

位置引数を一つ持ち、それはラベルの文字列です。以下のプロパティーも受け取ります。 :

text_style

ボタンテキストに使用されるスタイルの名前です。これが指定されず、さらに style プロパティーが文字列なら、「 _text 」がその文字列に追加されてデフォルトのテキストスタイルになります。

text_-

text を接頭辞に持つその他のプロパティーは、この接頭辞を取り除いてテキスト displayable に渡されます。

以下も受け取ります。 :

子は受け取りません。

screen display_preference():
    frame:
        has vbox

        label "Display"
        textbutton "Fullscreen" action Preference("display", "fullscreen")
        textbutton "Window" action Preference("display", "window")

Mousearea link

マウスエリアはマウスの出入りに反応できるスクリーンの領域です。ボタンと違ってマウスエリアはフォーカスを受け取らないので、その内部にボタンを持つマウスエリアも可能です。 mousearea ステートメントはパラメーターを受け取らず、以下のプロパティーを受け取ります。 :

hovered

マウスエリアにマウスが入ると実行されるアクション

unhovered

マウスエリアからマウスが出ると実行されるアクション

focus_mask

focus_mask スタイルプロパティーで、 displayable か None です。displayable ならマウスがその displayable の不透明な領域上にあるときのみマウスエリアはフォーカスを持ちます ( displayable はユーザーには表示されません )。

以下も受け取ります。 :

子は受け取りません。

通常 mouseare ステートメントは area スタイルプロパティーを受け取ってマウスエリアのサイズや位置を制御します。そのサイズを制御しないとマウスエリアは画面全体になり、かなり不便です。

注釈

Ren'Py のゲームはキーボードとジョイスティックでもプレイ出来るので、他の方法でもマウスエリアの機能を再現してください。

screen button_overlay():
    mousearea:
        area (0, 0, 1.0, 100)
        hovered Show("buttons", transition=dissolve)
        unhovered Hide("buttons", transition=dissolve)

screen buttons():
    hbox:
        textbutton "Save" action ShowMenu("save")
        textbutton "Prefs" action ShowMenu("preferences")
        textbutton "Skip" action Skip()
        textbutton "Auto" action Preference("auto-forward", "toggle")

label start:
    show screen button_overlay

Nearrect link

nearrect ステートメントは子オブジェクトをひとつ受け取り、その子オブジェクトをある矩形に近い位置に配置します。通常これは CaptureFocus() アクションを使用して保存された、フォーカスされた矩形です。これは、ツールチップやドロップダウンメニュー、プルダウンメニューに使用できます。

Nearrect は次のプロパティーを受け取ります :

rect

指定するならばこれは後述するように (x, y, w, h) の形の矩形であるべきす。これに対し、その子が相対指定で配置されます。

focus

指定するならこれは文字列であるべきです。この文字列は GetFocusRect() 相当な物に渡され、その矩形を探します。その名前のフォーカスされた矩形が見つかれば、子が描画されます。

これに "tooltip" を渡せば、ツールチップを表示している間中、最後にフォーカスされた位置を使用します。

prefer_top

指定するとその子をフォーカスされた矩形上部に優先的に配置されます。

以下も受け取ります。 :

Nearrect は他のレイアウトと異なり、その子をその内部ではなく指定の矩形の近くに配置します。その子はまずは利用可能な幅全体とその矩形の上と下の高さの最大値で描画されます。 y 座標は次のように算出されます。

  • その子が矩形の上部におさまり、かつ prefer_top が指定されていれば、矩形のすぐ上に配置されます。

  • そうではなく、子が矩形の下に収まれば、矩形直下に配置されます。

  • それ以外の場合、子は矩形のすぐ上に配置されます。

x 座標は通常の規則で計算され、子の xposxanchor プロパティー、および xalign のようにそれらを設定するプロパティーが使用されます。 位置プロパティーは矩形のx座標に対する相対値であり、浮動小数点の場合は幅に対する割合です。

最後に、 xoffsetyoffset プロパティーは通常通り適用されます。

nearrect の子が transform だった場合、その transform には showhide イベントが与えられますが、位置は即座に変更されます。 nearrect は画面の一番上で最適に動作し、 transforms と 配置は nearrect ではなくその子に適用されます。

nearrect の使用の 1 つはドロップダウンメニューです。

default difficulty = "Easy"

screen select_difficulty():

    # This frame can be a very complex layout, if required.
    frame:
        align (.5, .3)
        padding (20, 20)

        has vbox

        # This is the button that is clicked to enable the dropdown,
        textbutton "Difficulty: [difficulty]":

            # This action captures the focus rectangle, and in doing so,
            # displays the dropdown.
            action CaptureFocus("diff_drop")

        textbutton "Done":
            action Return()

    # All sorts of other screen elements could be here, but the nearrect needs
    # be at the top level, and the last thing show, apart from its child.

    # Only if the focus has been captured, display the dropdown.
    # You could also use showif instead of basic if
    if GetFocusRect("diff_drop"):

        # If the player clicks outside the frame, dismiss the dropdown.
        # The ClearFocus action dismisses this dropdown.
        dismiss action ClearFocus("diff_drop")

        # This positions the displayable near (usually under) the button above.
        nearrect:
            focus "diff_drop"

            # Finally, this frame contains the choices in the dropdown, with
            # each using ClearFocus to dismiss the dropdown.
            frame:
                modal True

                has vbox

                textbutton "Easy" action [ SetVariable("difficulty", "Easy"), ClearFocus("diff_drop") ]
                textbutton "Medium" action [ SetVariable("difficulty", "Medium"), ClearFocus("diff_drop") ]
                textbutton "Hard" action [ SetVariable("difficulty", "Hard"), ClearFocus("diff_drop") ]
                textbutton "Nightmare" action [ SetVariable("difficulty", "Nightmare"), ClearFocus("diff_drop") ]

ドロップダウンではスタイルを改善した方がよいかもしれませんが、ここでは述べません。

Null link

null ステートメントはスクリーンに空白の領域を挿入します。これは間を開けるために使用されます。 null ステートメントはパラメーターは受け取らず、以下のプロパティーを受け取ります。 :

width

ピクセル数での空白の幅です。

height

ピクセル数での空白の高さです。

以下も受け取ります。 :

子は受け取りません。

screen text_box():
    vbox:
         text "The title."
         null height 20
         text "This body text."

Side link

これはグリッドの中心か端に displayable を配置します。これはパラメーターを一つ受け取り、それはスペースで区切られたその子を配置する場所のリストです。このリストの各要素は次のうちの一つです。 :

'c', 't', 'b', 'l', 'r', 'tl', 'tr', 'bl', 'br'

「c」は中心、「t」は上端、「tl」は左上端、「br」は右下などのように表わしています。

side は以下のプロパティーを受け取ります。 :

spacing

グリッドの縦横の列の間のスペース

side は以下の種類のプロパティーも受け取ります。 :

レンダリング時に、これは最初に角を、次に側面、最後に中心のサイズを決定します。角と側面は利用可能な領域を 0 としてレンダリングされるので、それらに最小のサイズを与えて ( xminimum または yminimum を使用して ) すべてが描画される保証をする必要があります。子は上から下(つまり引数の文字列順)へ順に配置され、最後が最も高くなります。これは config.keep_side_render_order によって無効化されます。

位置リストのすべてに対応する子があるので、これは位置リストに登録されているのと同じ数の子を持たなければなりません。

screen side_test():
     side "c tl br":
          text "Center"
          text "Top-Left"
          text "Bottom-Right"

Text link

text ステートメントはテキストを表示します。これはパラメーターを一つ受け取り、それは表示するテキストです。以下のプロパティーも受け取ります。 :

子は受け取りません。

screen hello_world():
    text "Hello, World." size 40

Textbutton link

テキストラベル付きのボタンを作成します。ボタンはパラメーターを一つ受け取り、それはボタンの一部として含まれるテキストです。以下のプロパティーを受け取ります。 :

action

ボタンがアクティベートされると実行されるアクションです。これは sensitive がなければボタンが有効かどうかの、 selected がなければ選択されているかどうかの制御もします。

alternate

ボタンが代替方法でアクティベートされると実行される代替アクションです。代替方法はプレイヤーがマウスベースのプラットフォームでボタン上で右クリックするか、タッチベースのプラットフォームで長押しすると発生します。

hovered

ボタンがフォーカスを所得するときのアクションです。

unhovered

ボタンがフォーカスを失うときのアクションです。

selected

ボタンが選択されているかどうかを決定する式です。この式はインテラクション毎に少なくとも一回評価されます。 指定されなければ、アクションが選択状態決定に使用されます。

sensitive

ボタンが有効かどうかを決定する式です。この式はインテラクション毎に少なくとも一回評価されます。 指定されなければ、アクションが有効無効決定に使用されます。

keysym

押すとこのボタンのアクションを実行するキーボードのキーを表わす キーシンボル の文字列です。

alternate_keysym

押すとこのボタンの代替アクションを実行するキーボードのキーを表わす keysym の文字列です。

text_style

ボタンテキストに使用されるスタイルの名前です。これが指定されず、さらに style プロパティーが文字列なら、「 _text 」がその文字列に追加されてデフォルトのテキストスタイルになります。

text_-

text を接頭辞に持つその他のプロパティーは、この接頭辞を取り除いてテキスト displayable に渡されます。

以下も受け取ります。 :

子は受け取りません。

screen textbutton_screen():
    vbox:
        textbutton "Wine" action Jump("wine")
        textbutton "Women" action Jump("women")
        textbutton "Song" action Jump("song")

Timer link

これは時間が来るとアクションを実行するタイマーを作成します。これは位置パラメーターを一つ受け取り、それは秒数です。以下のプロパティーも受け取ります。 :

action

時間が来ると実行するアクションを指定します。このプロパティーは必須です。

repeat

True ならその時間が経つ度にタイマーが繰り返し実行されます。

modal

True なら、モーダルスクリーンによりブロックされるとそのタイマーは動作しません。 False または指定されないと、タイムーはモーダルスクリーンでブロックされても動作します。

Timer は子を受け取りません。

screen timer_test():
    vbox:
         textbutton "Yes." action Jump("yes")
         textbutton "No." action Jump("no")

    timer 3.0 action Jump("too_slow")

Transform link

transform をその子に適用します。これはパラメーターを受け取らず、以下のプロパティーグループを受け取ります。 :

これは子を一つは受け取る必要があります。

Vbar link

横向きになった bar です。プロパティーは bar と同じです。

screen volume_controls():
     frame:
         has hbox

         vbar value Preference("sound volume")
         vbar value Preference("music volume")
         vbar value Preference("voice volume")

Vbox link

これはその子を透明な縦長の箱に縦に並べて表示します。これはパラメーターを受け取らず、以下のプロパティーを受け取ります。 :

UI displayable の子はボックスに追加されます。

screen vbox_test():
    vbox:
         text "Top."
         text "Bottom."

Viewport link

viewport はドラッグやマウスホイールまたはスクロールバーでスクロール可能なスクリーンの領域です。画面より大きいものを表示するために使用され、以下のプロパティーを受け取ります。 :

child_size

レンダリングのために子に指定されるサイズで、 (xsize, ysize) のタプルです。子が自身のサイズを算出できるとき、これは通常省略されます。どちらかの要素が None なら子のサイズが使用されます。

mousewheel

これはつぎのうちの一つです

False

マウスホイールを無視します (デフォルト)。

True

縦にスクロールします。

"horizontal"

水平にスクロールします。

"change"

viewport が動くときのみ、viewport を縦にスクロールします。そうでないなら、マウスホイールイベントは残りのインターフェースに渡されます(例えば、changeが指定されていて、 key "viewport_wheeldown" action Return() がviewportの前に記述されていれば、 viewport が下端に達しているならそのスクリーンに処理を返させるようにできます)。

"horizontal-change"

Change モードと水平スクロールを組み合わせます。

draggable

True ならマウスのドラッグで viewport をスクロール出来ます。

edgescroll

マウスが viewport の端に到達するとスクロールします。 None を設定するか、2要素か3要素のタプルを設定します :

  • タプルの最初の要素は viewport の端からのピクセル数での距離であり、その距離からエッジスクロールが開始されます。

  • 第二要素は一秒ごとに何ピクセルスクロールするかの最大値です。

  • 与えられるなら三番目の要素はスクロールのスピードをマウスポインターと端との距離に基づいて調整する関数です。関数は -0.0 から 1.0 までの範囲の数字を引数に受け取り、同じ範囲の数字を返すべきです。デフォルトの関数では入力をそのまま返し、端との近さに比例してスクロールを加速させます。関数が入力された符号に基づき 1.0 か -1.0 を返すと一定の速度のスクロールになります。

xadjustment

ui.adjustment() が viewport の x 軸に使用されます。省略されると新しい adjustment が作成されます。

yadjustment

ui.adjustment() が viewport の y 軸に使用されます。省略されると新しい adjustment が作成されます。

xinitial

viewport の初期の水平位置のオフセットです。これはピクセル数の整数か、可能なオフセットの割合の小数です。

yinitial

viewport の初期の垂直位置のオフセットです。これはピクセル数の整数か、可能なオフセットの割合の小数です。

scrollbars

None でなければスクロールバーがこの viewport に追加されます。これは side レイアウトを作成し、その sideの中心に viewport を作成した viewport を置いて動作します。 scrollbars が "horizontal" なら水平なスクロールバーが viewport の下に追加され、 scrollbars が "vertical" なら垂直なスクロールバーが viewport の右に追加されます。 scrollbars が "both" なら水平垂直両方のスクロールバーが作成されます。

scrollbars が None でなければ、 viewport は次の接頭辞のプロパティーを受け取ります :

  • viewport_ で始まるプロパティーは viewport に渡されます。

  • side_ で始まるプロパティーは side に渡されます。

  • scrollbar_ で始まるプロパティーはあれば水平スクロールバーに渡されます。

  • vscrollbar_ で始まるプロパティーはあれば 垂直スクロールバーに渡されます。

接頭辞のないプロパティーも受け取られます。 位置スタイルプロパティー は side に渡され、他は viewport に渡されます。

arrowkeys

True なら viewport は上下左右の矢印キーでスクロール可能です。これはフォーカスを変更する通常のこれらのキーの機能に優先します。しかし、viewportが端に到達すると矢印キーはフォーカスを変更します。

pagekeys

True なら viewport はページアップ/ダウンキーで上下にスクロール可能です。これはロールバック/フォワードを起こす通常のこれらのキーの機能を無効にします。

さらにこれは以下のスタイルプロパティーを受け取ります。 :

これは一つの子を受け取ります。 0 か 2 以上の子が指定されると、それらを含めるために fixed が作成されます。

viewport のスクロールバーを作成するためにはそれに id を与えて、その id を引数に XScrollValue()YScrollValue() を使用するのが最適です。

screen viewport_example():
    side "c b r":
         area (100, 100, 600, 400)

         viewport id "vp":
             draggable True

             add "washington.jpg"

         bar value XScrollValue("vp")
         vbar value YScrollValue("vp")

Vpgrid link

vpgrid (viewport grid) は viewport と grid を一つの displayable に結合します。 vpgrid は grid のように複数の子を受け取り、それらの子のレンダリングは最適化され、 viewport 内に表示されている子のみがレンダリングされます。

vpgrid はすべてのセルが同じサイズで、最初の子のサイズであると想定します。 vpgrid が誤ってレンダリングされたら、すべての子が同じサイズであるか確認してください。

vpgrid には colrows の少なくとも一つのプロパティーが指定されなければいけません。一つが省略されるか None であれば、サイズと spacing, 子の数から自動的に決定されます。

Vgrids は以下のプロパティーを受け取ります。 :

cols

グリッドの行数

rows

グリッドの列数

transpose

True なら列の前に行が埋められます。これのデフォルトは colsrows プロパティーに依存します。 cols が与えられたなら、行が列の前に埋められ、そうでなければ列が行の前に埋められます。

さらに vpgrid は viewport が可能なすべてのプロパティーと以下のスタイルプロパティーを受け取ります。 :

scrollbar プロパティーが指定されると、接頭辞つきのプロパティーは viewport 同様に vpgrid に渡されます (viewport_ は vpgrid 自体に渡されます)。

screen vpgrid_test():

    vpgrid:

        cols 2
        spacing 5
        draggable True
        mousewheel True

        scrollbars "vertical"

        # Since we have scrollbars, this positions the side, rather than
        # the vpgrid.
        xalign 0.5

        for i in range(1, 101):

            textbutton "Button [i]":
                xysize (200, 50)
                action Return(i)

Window link

widow はゲーム内の台詞を表示するための背景を含むウィンドウのことです。これは以下のプロパティーを受け取ります。 :

これは一つの子を受け取ります。 0 か 2 以上の子が指定されると、それらを含めるために fixed が作成されます。

screen say(who, what):
    window id "window"
        vbox:
            spacing 10

            text who id "who"
            text what id "what"

Imagemap ステートメント link

スクリーン、特に視覚的なものを作成する便利な方法は imagemap を使用することです。 imagemap を作成するときに imagemap ステートメントは 6 つの画像を指定するために使用されます。hotspot と hotbar の画像はその画像の長方形の領域を切り取って、アクションと value をそれらの領域に適用するために使用されます。

ここに imagemap を使用した preferences スクリーンの例があります。

screen preferences():

    tag menu
    use navigation

    imagemap:
        auto "gui_set/gui_prefs_%s.png"

        hotspot (740, 232, 75, 73) action Preference("display", "fullscreen") alt _("Display Fullscreen")
        hotspot (832, 232, 75, 73) action Preference("display", "window") alt _("Display Window")
        hotspot (1074, 232, 75, 73) action Preference("transitions", "all") alt _("Transitions All")
        hotspot (1166, 232, 75, 73) action  Preference("transitions", "none") alt _("Transitions None")

        hotbar (736, 415, 161, 20) value Preference("music volume") alt _("Music Volume")
        hotbar (1070, 415, 161, 20) value Preference("sound volume") alt _("Sound Volume")
        hotbar (667, 535, 161, 20) value Preference("voice volume") alt _("Voice Volume")
        hotbar (1001, 535, 161, 20) value Preference("text speed") alt _("Text Speed")

Imagemap link

imagemap ステートメントは画像を指定するために使用されます。これはパラメーターは受け取らず、以下のプロパティーを受け取ります。 :

auto

この imagemap に使用する画像を自動的に定義するために使用されます。これは %s を含む文字列であるべきです。これが与えられて、画像のプロパティーの一部が省略されていると %s をそのプロパティーの名前で置き換えて、その値をそのプロパティーのデフォルトとして使用します。

例えば auto が "imagemap_%s.png" で idle が省略されると、 idle はデフォルトで "imagemap_idle.png" になります。同様に auto が "imagemap %s" なら imagemap idle 画像が使用されます。

auto の動作は config.imagemap_auto_function を変更してカスタマイズできます。

ground

hotspot や hotbar の一部ではない画像を配置するために使用される画像

insensitive

hotspot や hotbar が無効の時に使用される画像

idle

hotspot が選択されておらず、フォーカスを持たないとき、また hotbar がフォーカスを持たずバーが空のときに使用される画像

hover

hotspot が選択されておらず、フォーカスを持つとき、また hotbar がフォーカスを持ちバーが空のときに使用される画像

selected_idle

hotspot が選択され、フォーカスを持たないとき、また hotbar がフォーカスを持たずバーが満タンのときに使用される画像

selected_hover

hotspot が選択され、フォーカスを持つとき、また hotbar がフォーカスを持ちバーが満タンのときに使用される画像

alpha

これはデフォルトでは True で、 hotspot はマウスが画像の不透明な領域上にあるときだけフォーカスを持ちます。 False なら hotspot はマウスが長方形の領域上にあるとフォーカスを持ちます。

cache

これはデフォルトでは True で、 hotspot のデータをキャッシュして追加のディスク消費の代わりにパフォーマンスを改善します。

以下のプロパティーを受け取ります。 :

imagemap は fixed を作成し、 ( hotspot と hotbar だけでなく ) すべての子をそこに追加します。

Hotspot link

hotspot は画像で構成されるボタンです。ボタンを作成する imagemap の領域を与えるタプル (x, y, width, height) をパラメーターとして一つ受け取ります。これは以下のプロパティー受け取ります。 :

action

ボタンがアクティベートされると実行されるアクションです。これはボタンが有効か、選択されているかどうかの制御もします。

alternate

ボタンが代替方法でアクティベートされると実行される代替アクションです。代替方法はプレイヤーがマウスベースのプラットフォームでホットスポットを右クリックするか、タッチベースのプラットフォームで長押しすると発生します。

hovered

ボタンがフォーカスを所得するときのアクションです。

unhovered

ボタンがフォーカスを失うときのアクションです。

selected

ボタンが選択されているかどうかを決定する式です。この式はインテラクション毎に少なくとも一回評価されます。 指定されなければ、アクションが選択状態決定に使用されます。

sensitive

ボタンが有効かどうかを決定する式です。この式はインテラクション毎に少なくとも一回評価されます。 指定されなければ、アクションが有効無効決定に使用されます。

keysym

押すとこのボタンのアクションを実行するキーボードのキーを表わす キーシンボル の文字列です。

alternate_keysym

押すとこのボタンの代替アクションを実行するキーボードのキーを表わす keysym の文字列です。

以下も受け取ります。 :

hotspot は fixed を作成し、そこに子を追加出来るようにします。 fixed は hotspot と同じ大きさの領域を持つので、子は hotspot に対する相対距離で配置されます。

hotspot に alt スタイルプロパティーを指定すると Ren'Py のセルフボイシング機能が動くようになります。

Hotbar link

hotbar は画像で構成されるバーです。バーを作成する imagemap の領域を与えるタプル (x, y, width, height) をパラメーターとして一つ受け取ります。これは以下のプロパティー受け取ります。 :

value

バーの現在の値。これは bar value オブジェクトか数字です。

range

バーの最大値です。これは value が数字なら必要です。

adjustment

このバーを調整する ui.adjustment() オブジェクトです。

valueadjustment のどちらかは与えられなければなりません。さらにこの機能は以下を受け取ります。 :

これは子は受け取りません。

hotbar に alt スタイルプロパティーを指定すると、Ren'Py のセルフボイシング機能が動くようになります。

Add ステートメント link

add ステートメントは少し特殊で、すでに存在する Displayable をスクリーンに追加します。結果としてユーザーインターフェースステートメントへの共通のプロパティーを受け取りません。

Add link

画像やその他の displayable をスクリーンに追加します。これは任意で transform プロパティー を受け取ります。少なくとも一つ transform プロパティーが与えられると、 Transform が作成され、その画像をラップして、その transform に渡します。

displayable が None ならスクリーンには何も追加されません。

これは子を受け取りません。

screen add_test():
    add "logo.png" xalign 1.0 yalign 0.0

Advanced Displayables link

よく使用されるステートメントに加えてスクリーン言語は高度な displayable に対応するステートメントを持ちます。displayable とステートメントの対応は単純です。displayable の位置パラメーターはそのステートメントの位置パラメーターになり、キーワード引数およびスタイルプロパティーはスクリーン言語のプロパティーになります。

高度な displayable のステートメントは次になります。 :

drag

Drag クラスを作成します。 drag には任意の子が与えられるか、または child スタイルプロパティーを使用して子や、それがフォーカスを所得した場合のバージョンが提供されます。drag は focus_mask スタイルプロパティーも受け取れます。

draggroup

DragGroup クラスを作成します。DragGroup はその子として 0 以上の drag を持ちます。

Has ステートメント link

has ステートメントは子を一つだけ受け取るステートメントのために使用するコンテナを、 fixed の代わりに指定できるようにします。 has ステートメントはおそらく一つの子のみを受け取るステートメントの内部で使用されるでしょう。キーワード引数 has の (同じ行の) 後にはもう一つのステートメントが続き、それは一つ以上の子を受け取るコンテナの displayable を作成するステートメントでなければなりません。

has ステートメントはそれを含むブロックの解釈を変更しします。そのブロックで作成された子の displayable は親の displayable ではなくそのコンテナに追加されます。親の displayable に対するキーワード引数は has ステートメントの後は許可されません。複数の has ステートメントが同じブロックで使用可能です。

has ステートメントは以下のステートメントの子として提供されます。

  • button
  • frame
  • window

has ステートメントには以下のステートメントが入れ物として与えられます。

  • fixed
  • grid
  • hbox
  • side
  • vbox
screen volume_controls():
     frame:
         has vbox

         bar value Preference("sound volume")
         bar value Preference("music volume")
         bar value Preference("voice volume")

制御用のステートメント link

スクリーン言語には、条件実行や反復、他のスクリーンを含んだり、イベントによるアクションや任意の python コードを実行したりするための制御用ステートメントがあります。

Default link

default ステートメントは変数がスクリーンの引数として渡されなかったり、 use ステートメントを使用してそのスクリーンを呼び出しているスクリーンから継承されなければ変数のデフォルトの値を設定します。

screen scheduler():
    default club = None
    vbox:
         text "What would you like to do?"
         textbutton "Art Club" action SetScreenVariable("club", "art")
         textbutton "Writing Club" action SetScreenVariable("club", "writing")

         if club:
             textbutton "Select" action Return(club)

For link

for ステートメントは python の for ステートメントに相当しますが、else 節をサポートしていません。変数同様に(任意にネストされた)タプルへの代入もサポートしています。

$ numerals = [ 'I', 'II', 'III', 'IV', 'V' ]

screen five_buttons():
    vbox:
        for i, numeral in enumerate(numerals):
            textbutton numeral action Return(i + 1)

for ステートメントは index 節を受け取ります。

screen five_buttons():
    vbox:
        for i, numeral index numeral in enumerate(numerals):
            textbutton numeral action Return(i + 1)

index 節があれば、そのリストの各行に対してユニークである、ハッシュがあり比較出来る値を返す式で構成されるべきです。Ren'Py はこの値を使用して transform とその他の状態を確認します。Ren'Py はこの値を使用して transform やその他の状態が適切な反復をするようにします。繰り返し処理するリストに要素が追加または除去されるときの奇妙な振る舞いを見たなら、 index 節が使いたくなるでしょう。

If link

スクリーン言語の if ステートメントは Python/Ren'Py の if ステートメントと同様です。 if, elif, else 節をサポートしています。

screen skipping_indicator():
    if config.skipping:
         text "Skipping."
    else:
         text "Not Skipping."

On link

on ステートメントはイベントによってスクリーンがアクションを実行できるようにします。パラメーターを一つ受け取り、それはイベントの名前です。これは以下のうち一つであるべきです。 :

  • "show"
  • "hide"
  • "replace"
  • "replaced"

イベント時に実行するアクションを指定するプロパティーを受け取ります。

screen preferences():
    frame:
        has hbox

        text "Display"
        textbutton "Fullscreen" action Preferences("display", "fullscreen")
        textbutton "Window" action Preferences("display", "window")

    on "show" action Show("navigation")
    on "hide" action Hide("navigation")

Use link

use ステートメントはスクリーンに他のスクリーンを含めるようにします。 use ステートメントは使用するスクリーンの名前を受け取ります。これには任意で括弧で囲まれた引数リストが続きます。

使用されるスクリーンに括弧がなければ、現在のスクリーンのスコープに読み込み書き込みでき、 use ステートメントで渡されたキーワード引数で更新されます。そうでなければそのスコープは引数をそれらのパラメーターに割り当てた結果で初期化されます。

screen file_slot(slot):
    button:
        action FileAction(slot)

        has hbox

        add FileScreenshot(slot)
        vbox:
            text FileTime(slot, empty="Empty Slot.")
            text FileSaveName(slot)


 screen save():
     grid 2 5:
         for i in range(1, 11):
              use file_slot(i)

use ステートメントは必要ならプロパティー id をパラメーターリストの後に 1 つ受け取れます。このスクリーンは同じタグを持つ 2 つのスクリーンが同じスクリーンを使用するときのみ有用です。この場合、あるスクリーンが他方のスクリーンを置き換えると、使用されたスクリーンの状態は以前のスクリーンから新しいスクリーンへ譲渡されます。

transform t1():
    xpos 150
    linear 1.0 xpos 0

screen common():
    text "Test" at t1

screen s1():
    tag s
    use common id "common"
    text "s1" ypos 100

screen s2():
    tag s
    use common id "common"
    text "s2" ypos 100

label start:
    show screen s1
    pause
    show screen s2
    pause
    return

スクリーン名の代わりに、キーワード引数 expression も指定でき、使用するスクリーン名を指定する式が続きます。スクリーンに引数が必要なら、 pass キーワードを使用して式と分離しなければなりません。

screen ed(num):
    text "Ed"
    text "Captain"

screen kelly(num):
    text "Kelly"
    text "First Officer"

screen bortus(num):
    text "Bortus"
    text "Second Officer"

screen crew():
    hbox:
        for i, member in enumerate(party):
            vbox:
                use expression member.screen pass (i + 1)

Use と Transclude link

use ステートメントはスクリーン言語ステートメントのブロックも受け取れます。ブロック指定時に使用されるスクリーンには transclude ステートメントがあるでしょう。 transclude ステートメントは use ステートメントのブロック内にあるステートメントで置き換えられます。

これによりスクリーンを使用して再利用可能なレイアウトが定義出来るようになります。例えば次のスクリーン

screen movable_frame(pos):
    drag:
        pos pos

        frame:
            background Frame("movable_frame.png", 10, 10)
            top_padding 20

            transclude

これは他の要素をラップする再利用可能な要素であることを意図しています。次のように使用します。

screen test:
    use movable_frame((0, 0)):
        text "You can drag me."

    use movable_frame((0, 100)):
        vbox:
            text "You can drag me too."
            textbutton "Got it!" action Return(True)

use と transclude は ユーザー定義スクリーン言語ステートメント に基づいて形式を組み立てます。

Python link

スクリーン言語には python コードを実行する一行または複数行の python ステートメントも含まれます。このコードはそのスクリーンのスコープで実行します。

python コードはスクリーンの外への副作用を起こしてはいけません。 Ren'Py はスクリーンが最初に表示される前に画像予測処理の一部として必要なら何度もスクリーンのコードを実行します。結果としてスクリーンのコードが副作用を持つなら、それが何回実行されるかはわかりません。

screen python_screen:
    python:
        test_name = "Test %d" % test_number

    text test_name

    $ test_label = "test_%d" % test_label

    textbutton "Run Test" action Jump(test_label)

Showif Statement link

showif ステートメントは条件を受け取ります。条件が Trueならその子を表示し、 False ならその子を非表示にします。 showif の子が transform を持つなら、子に ATL イベントを送り、表示、非表示処理を管理して Ren'Py がアニメーションで表示、非表示出来るようにします。

showif ステートメントは displayable 内のその子を表示非表示処理を管理する displayable にラップします。

複数の showif ステートメントは if ステートメント同様 1 つの showif/elif/else 構造に纏められます。if ステートメントとは違い、条件が False であっても python コードを含むそのブロックを showif はすべて実行します。 これは showif ステートメントが非表示される子を作成する必要があるためです。

showif は 3 つのイベントをその子に送ります。

appear

スクリーンが最初に表示されたときに条件が True なら送られ、即座に子を表示します。

show

条件が False から True に変わると送られます。

hide

条件が True から False に変わると送られます。

これらの目的のため、 elif 節の条件はそれ以前の条件が True なら常に False で、すべての前の条件が False なら else 節だけが True になります。

transform cd_transform:
    # This is run before appear, show, or hide.
    xalign 0.5 yalign 0.5 alpha 0.0

    on appear:
        alpha 1.0
    on show:
        zoom .75
        linear .25 zoom 1.0 alpha 1.0
    on hide:
        linear .25 zoom 1.25 alpha 0.0

screen countdown():
    default n = 3

    vbox:
        textbutton "3" action SetScreenVariable("n", 3)
        textbutton "2" action SetScreenVariable("n", 2)
        textbutton "1" action SetScreenVariable("n", 1)
        textbutton "0" action SetScreenVariable("n", 0)

    showif n == 3:
        text "Three" size 100 at cd_transform
    elif n == 2:
        text "Two" size 100 at cd_transform
    elif n == 1:
        text "One" size 100 at cd_transform
    else:
        text "Liftoff!" size 100 at cd_transform

label start:
    call screen countdown

スクリーン・ステートメント link

Ren'Py 言語にはスクリーンに作用する三つのスクリーンステートメントがあります。

Show Screen link

show screen ステートメントはスクリーンを表示します。スクリーン名と任意の引数リストを受け取ります。もしあるなら引数はそのスクリーンのスコープを初期化するために使用されます。 show_screen()call_screen() に渡されるいくつかの特別なキーワードもあります。

expression キーワードが指定されると、それに続く式がスクリーン名として評価されます。expression キーワードでスクリーンに引数を渡すには、式と引数を pass キーワードで区切ります。

$ screen_name = "my_screen"
show screen expression screen_name
# Or if you need to pass some arguments
show screen expression screen_name pass ("Foo", message="Bar")

show screen ステートメントは任意で nopredict キーワードを受け取り、スクリーンの予測を禁止します。スクリーンの予測中にスクリーンへの引数は評価されます。スクリーン引数の評価が不測の副作用を起さないように確認してください。

警告

スクリーンの引数の評価が副作用を起すなら、あなたのゲームは予測しない方法で動作するかもしれません。

このように表示されたスクリーンは明示的に非表示にされるまで表示されます。これによりそれらで意図的に上書きが出来ます。

show screen overlay_screen
show screen clock_screen(hour=11, minute=30)

if rare_case:
    show rare_screen nopredict

show screen ステートメントは with 節を受け取り、それは show ステートメントと同様に解釈されます。

show screen clock_screen with dissolve

Hide Screen link

hide screen ステートメントは現在表示されているスクリーンを非表示にします。そのスクリーンが表示されていなければ何もしません。 with 節は show ステートメントの with 節と同様に解釈されます。

show screen ステートメントと同様に、 hide screenexpression キーワードを受け取り、任意の式をスクリーン名として使用できます。

hide screen rare_screen
hide screen clock_screen with dissolve
hide screen overlay_screen
$ screen_name = "some_screen"
hide screen expression screen_name

Call Screen link

call screen ステートメントはスクリーンを表示し、現在のインタラクションが終了するとそれを非表示にします。そのスクリーンが値を返すならその値は _return に代入されます。

これは imagemap を表示するために使用されます。 imagemap は Return() アクションを利用して値を変数 _return に代入するか、 Jump() アクションを使用してラベルにジャンプできます。

call screen ステートメントは任意で nopredict キーワードを受け取り、スクリーンの予測を禁止します。スクリーンの予測中にスクリーンへの引数は評価されます。スクリーン引数の評価が不測の副作用を起さないように確認してください。

call screen ステートメントで、 with 節はそのスクリーン表示時にトランジションを起こさせます。

スクリーンの呼び出しはインタラクションであり、インタラクションは暗黙に with None を伴うため、 call screen の後に with ステートメントを続けてもすでにそのスクリーンは表示されていないため、トランジションを使用してスクリーンを消しません。暗黙の with None トランジションを無効にするには、特別なキーワード引数 _with_none=False を以下の例のようにスクリーンに渡してください。

[ With(dissolve), Return() ] アクションリストのようなトランジションを発生させる他の方法も動作します。

show screen ステートメントと同様に、 call screenexpression キーワードを受け取り、任意の式をスクリーン名として使用できます。

警告

スクリーンの引数の評価が副作用を起すなら、あなたのゲームは予測しない方法で動作するかもしれません。

call screen my_imagemap

call screen my_screen(side_effect_function()) nopredict

# Shows the screen with dissolve
call screen my_other_screen with dissolve
# The screens instantly hides with None, then the pixellate transition executes
with pixellate

# Shows the screen with dissolve and hides it with pixellate.
call screen my_other_screen(_with_none=False) with dissolve
with pixellate

$ screen_name = "my_screen"
call screen expression screen_name pass (foo="bar")

スクリーン variant link

Ren'Py は Windows, Mac, Linux PC のような伝統的なマウスを持つデバイスと Android ベースのスマートフォンやタブレットのような最新のタッチベースのデバイス両方で動作します。スクリーン variant によりゲームは複数の種類のスクリーンを提供でき、実行中のハードウェアに最適なものを使用できます。

Ren'Py は config.variants にリストされた順番で variant を探索して使用するスクリーン variant を選択します。存在する最初の variant が使用されます。

環境変数 RENPY_VARIANT があれば空白でその変数を分割し、 None を追加して config.variants を初期化します。RENPY_VARIANT を 「medium tablet touch」や「small phone touch」のように設定すると PC で android デバイス用のスクリーンをテスト出来ます。

環境変数がなければ variant のリストは以下のリストを順番に探索して現在のプラットフォームに対応するものを選んで自動的に生成されます。

"steam_deck"

Steam Deck またはそれに相当するハードウェアで実行していれば True です。

"steam_big_picture"

Steam Big Picture モードで実行していれば True です。

"large"

比較的小さなテキストを快適に読め、ボタンを簡単にクリックできる十分大きな画面です。これはコンピューターの画面に使用されます。

"medium"

やや小さいテキストは読めるが、ボタンは快適に押せるためにはサイズを大きくしなければならない画面です。これはタブレットで使用されます。

"small"

テキストを読むためにも字を大きくする必要がある画面です。これは携帯やテレビで使用されます ( テレビは物理的には大きいですが、大概遠くて見にくいです )。

"tablet"

画面の対角線が 6 インチタッチかそれ以上のタッチスクリーンベースのデバイスで定義されます ( 通常は「 medium 」が「 tablet 」の代わりに使用されます )。

"phone"

画面の対角線が 6 インチタッチかそれ以下のタッチスクリーンベースのデバイスで定義されます。そのような小さなデバイスではボタンを十分に大きくして簡単に選択できるようにすることが重要です ( 通常は「 small 」が「 phone 」の代わりに使用されます )。

"touch"

タッチスクリーンベースのデバイスで定義されます。

"tv"

TV ベースのデバイスで定義されます。

"firetv"

Amazon Fire TV のコンソール上で定義されます ("tv" と "small" も定義されます )。

"chromeos"

Chromebook 上で Android app として実行時に定義されます。

"android"

すべての Android デバイスで定義されます。

"ios"

iPad ( "tablet""medium" も定義されます )や iPhone ("phone""small" も定義されます)のような iOS デバイスで定義されます。

"mobile"

Android や iOS, モバイルウェブブラウザー のようなモバイルプラットフォームを定義します。

"pc"

Windows, Mac OS X, Linux で定義されます。 PCはマウスとキーボードを所持し、ボタンへのフォーカスと正確な移動が出来ると期待されます。

"web"

ウェブブラウザー内部で実行しているときに定義されます。

None

常に定義されます。

スクリーン variant を定義する例です。 :

# A variant hello_world screen, used on small touch-based
# devices.
screen hello_world():
     tag example
     zorder 1
     modal False
     variant "small"

     text "Hello, World." size 30

以下も参照してください link

Screen Actions, Values, Functions : スクリーンと使用するためのアクションやその他ツールの包括的なリストです。

スクリーン言語の最適化 : できるだけ効率のよいスクリーンを作成する便利な方法があります。

スクリーンと Python : Ren'Py であらかじめ定義されたツールの使用から、Ren'Py の拡張までがあります。