スクリーンとスクリーン言語 link
Ren'Py のゲームを見ると、ゲームを画像とユーザーインターフェイスの2つの部分に分割できることに気づくでしょう。画像は scene、show、hide ステートメントを使ってユーザーに表示し、一般には進行中のストーリーの一部となっています。それ以外の部分はユーザーインターフェイスの一部で、スクリーンを使ってカスタマイズします。
スクリーンは4つの方法で表示できます:
スクリプトのステートメントが実行されるときに暗黙的に表示する。例えば、say ステートメントが実行されると、 say スクリーンが表示されます。
自動的に表示する。例えば Ren'Py はゲーム開始時やユーザーがメインメニューに戻るとき、 main_menu スクリーンを表示します。
ボタン、マウスのボタン、キーボードのキーによるアクションで表示する。デフォルトでは、ユーザーが右クリックするか、エスケープキーが押された時に save スクリーンが表示されます。他にも、スクリーン上にボタンを定義して save スクリーンを表示も可能です。
明示的に、ステートメントを使ってスクリーンを表示する。
一度に複数のスクリーンを表示できます。
スクリーンには主に2つの機能があります。1つはユーザーへの情報掲示です。情報はテキスト、バー、画像を使って示せます。ゲームのプレイにおいて、一部の情報のこのような形での掲示は重要です。 say スクリーンで例を挙げると、これを使用してキャラクター名と彼女が話している内容を含んだダイアログをユーザーに表示します。
他にスクリーンはユーザーからの入力を受け付けてゲームに反映できます。ボタンやバーを使ってアクションを起こしたり値を調整したりできます。Ren'Py には事前に定義されているアクションのプールがあり、ゲームを進められるようにしたり、設定を調整したり、ゲームをロード・セーブしたり、その他多数のアクションを発生させたりできます。ゲーム製作者も新しいアクションを Python で書けます。
スクリーンはゲームがインタラクションを開始した時、及びインタラクションが再開されるたびに更新されます。 with None
ステートメントはインタラクションを発生させず、スクリーンを更新させないので注意してください。必要であれば with Pause(0)
でスクリーンを更新します。
スクリーンはそれに関連付けられたスコープを持ち、変数に値を与えます。スクリーンには様々な種類の変数があり、次のリストに示すように名前解決されます。 :
最初はローカル変数です。これらは自身が表示(または呼び出し)される代わりに use ステートメントで他の物に含まれて使用されいるスクリーンにのみあります。それらは後述のスクリーン変数にかなりに類似しており、同様に作成されますが、例外としてローカル変数は使用されているスクリーンからのみアクセス出来ます。それらはその他のアクションの中からはとりわけ
SetLocalVariable
で、または使用されているスクリーン中の python ブロックや行で設定されます。SetScreenVariable
のようなアクションはローカル変数に対しては 動作しません。ローカルパラメーターは使用されるスクリーンによって所得されるパラメーターです。それらはローカル変数と同じスコープにあり、スクリーンパラメーターと同じ動作と制約に従います。下記参照
ローカル変数内で名前が解決できないまたは use により他のものに使用されているスクリーンでなければ、その名前はスクリーン変数から探されます。これらの変数は一番外側のスクリーン内で Default や Python ステートメントにより作成されます。スクリーン変数はとりわけ
SetScreenVariable
アクションや、一番外側のスクリーンまたは同じ名前のローカル変数がない使用されたスクリーンの python ブロックや行で設定されます。スクリーンパラメータ(screen ステートメントの括弧の中で定義され、渡される値)はスクリーン変数と同じスコープに存在します(つまり、同じ名前を持つことはできません)が、アクションによって設定または編集できません。これはアクションが実行されるたびを含め、任意の回数元の値にリセットされるためです。そのためもし
SetScreenVariable
アクション (または他のアクション) によって値が編集された場合、その直後にリセットされるでしょう。これは、スクリーン内の Python ブロックで定義された変数の場合もそれらのブロックが任意の回数実行されるため同様です。対照的に、スクリーン内の default ステートメントはスクリーンが表示される時にのみ実行されます。
最後の場所として、一般的な store つまり Ren'Py のグローバル変数のすべてがある場所から変数の名前を探します。そのような変数はとりわけ
SetVariable
アクションによって設定されます。
注釈
時に直接表示され、時に他のものに使用されるスクリーン内部の変数を設定するアクションが欲しければ、 SetLocalVariable
を使用してください。かなり非効率的ですが、両方のケースで動作します。
スクリーンのコードはスクリーン外への副作用を起こしてはいけません 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 link
True ならそのスクリーンはモーダルです。モーダルなスクリーンはデフォルトのキーマップを除いて、ユーザーがその下にある displayable に作用できないようにします。これはゲーム開始時に一度評価されます。
- sensitive link
ボタンが有効かどうかを決定する式です。この式はインテラクション毎に少なくとも一回評価されます。
- tag link
式ではなく名前として解釈されます。これはこのスクリーンと関連づけられるタグを指定します。スクリーンの表示は同じタグの他のスクリーンを置き換えます。これを使用して一つのコンテキストには同時に一つのメニューのスクリーンのみが表示されるようにできます。
- zorder link
これはスクリーンがどれぐらいユーザーに近いかを制御します。数字が大きいほどスクリーンはユーザーの近くに表示されます。デフォルトでは 0 です。
- variant link
与えられるならこれは定義されるスクリーン variant 名の文字列または文字列のリストです。 スクリーン variant を参照してください。
- layer link
そのスクリーンが表示されるデフォルトのレイヤー名の文字列です。
- roll_forward link
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 link
これは 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 にはイベントが送られません。
1つのステートメントが at プロパティーと
at transform
の両方を持てます。プロパティーは最初にこなければならず、先に適用されます。screen title(): add "title background": at sepia text "The Title of the Game": at sepia, truecenter at transform: alpha 0.0 linear 0.5 alpha 1.0
- default_focus link
True を与えるとその displayable はデフォルトでフォーカスを持つようになります。複数の displayable がこれを持つときは、その値が比較されて最大のものをもつ displayable がデフォルトフォーカスを持ちます。
デフォルトフォーカスは最後のインタラクションがマウスクリックやマウスの動き、タッチでないときのみ使用されます。
- extra_alt link
これを使用して セルフボイシング機能 用に extra alt テキストを指定します。定義されていいればセルフボイシングが有効になっているときに '?' キーが押されると、 extra alt テキストがプレイヤーに読み上げられます。
この
extra_alt
は子に対してextra_alt
が指定されていない限りその displayable のすべての子に継承されます。extra alt テキストは視覚障害のあるプレーヤーに Displayable のグループに対する追加情報の提供を目的としています。
- focus link
文字列か整数を受け取って displayable にフォーカス用の名前を与えます。Ren'Py はインタラクションの開始時にフォーカスを与える displayable を決定するとき、フォーカスの名前の間に構造的な類似点を探します。例えばある box にフォーカス名が与えられていてその box の三つ目のボタンがインタラクションの最後にフォーカスを所得していれば、同じフォーカス名を持つ box の三つ目のボタンが次のインタラクションの開始時にハイライトされるます。
- group_alt link
これを使用して セルフボイシング機能 のグループ接頭辞を指定します。セルフボイシングが有効な場合、同じグループ接頭辞の Displayable が最初にフォーカスされるとグループ接頭辞が朗読されま、異なるグループ接頭辞を持つ Displayable がフォーカスされるまで再度朗読されることはありません。
group_alt
は、子に指定されていなければすべてのその Displayable の子に継承されます。
- id link
ユーザーインターフェイスステートメント用の識別子です。スクリーン表示時に、指定された id を持つ displayable にプロパティーの値を渡せます。いくつかのスクリーンでは指定された id を持つ displayable 作成が必要とされます。
displayable が id 指定で作成されると、その id はその Displayable オブジェクトの id という名前の属性に文字列として格納されます。
- prefer_screen_to_id link
True なら、スクリーンと Displayable の識別子がプロパティーに同時に与えられたとき、スクリーンのプロパティーが使用されます。デフォルトは False であり Displayable のプロパティーが使用されます(これを使用してスクリーンが Character から渡されるプロパティーを上書きするか決められます)。
- style link
この displayable に適用されるスタイルの名前です。そのスタイルはスタイルプロパティーにデフォルトの値を与えます。
- style_prefix link
より限定的なスタイルやスタイル接頭辞がこの displayable とその子になければ、そのすべての子のスタイルに接頭辞を与えます
スタイル名はスタイル接頭辞とアンダースコア、スタイル接尾辞を繋げて作られます。スタイル接尾辞は style_suffix から指定されるか、 displayable によって決定されます。
例えば vbox がスタイル接頭辞「 pref 」を持っていると、 vbox にはスタイル「 pref_vbox 」が指定されます。より限定的なスタイルやスタイル接頭辞が指定されていなければ、その vbox 内のボタンはスタイル「 pref_button 」を持ちます。
このようにアクセスされるスタイルは、もしなければ作成されます。接頭辞を
None
に設定するとこの displayable とその子から接頭辞がなくなります。
- style_group link
style_prefix のエイリアスで、古いバージョンの Ren'Py で使用されます。
- style_suffix link
style_prefix と結合してスタイル名になる接尾辞を指定します。これが
"small_button"
でスタイル接頭辞が"pref"
なら、スタイルは"pref_small_button"
が使用されます。スタイル接頭辞がなければ、これはスタイル名が直接使用されます。スタイル接尾辞は単独の displayable のみに適用され、 displayable の子には適用されません。
- tooltip link
tooltip をこの dispalyable に代入します。displayable がフォーカスを得ると、このプロパティーの値が
GetTooltip()
関数から利用可能になります。詳細は Tooltip を参照してください。tooltip に渡されるオブジェクトは等号をサポートしなければなりません。そうでなければ、無限ループが発生します。
- arguments link
displayable に与えられる追加の位置引数のタプルやリストです。
- properties link
displayable に与えられる追加のプロパティーを含む辞書です。
多くのユーザーインターフェイスステートメントはスタイルプロパティーや transform プロパティーの類いを受け取ります。これらのプロパティーには対応するスタイル接頭辞を持たせて、いつそれらが適用されるか決められます。例えばテキストに hover_size
プロパティーが与えられるとそれはテキストの上にマウスがあるときのテキストの大きさを設定します
ユーザーインターフェースステートメントは as
節を受け取り、それは引用符なしで変数名を受け取ります。ステートメントが作成する displayable がその変数に代入されます(the drag and drop documentation で例が見られます)。
Bar link
データを閲覧したり調整するための水平方向のバーを作成します。以下のプロパティーを受け取ります。
- range link
バーの最大値です。これは value が数字なら必要です。
- adjustment link
このバーを調整する
ui.adjustment()
オブジェクトです。
- changed link
与えるならこれは python 関数であるべきです。関数は adjustment が変更されるとその adjustment の value を引数に呼び出されます。
- hovered link
バーがフォーカスを所得したときのアクションです。
- unhovered link
バーがフォーカスを失うときのアクションです。
- released link
バーが離されると実行されるアクションです。これはバーが変化していなくても実行されます。
value か adjustment のどちらかは与えられなければなりません。さらにこの機能は以下を受け取ります。 :
これは子は受け取りません。
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")
Dismiss link
dismiss ステートメントは、非常に特殊な dismiss displayable を作成します。これは他の displayable にフォーカスがないときにフォーカスを獲得し、それがアクティベートされたときにアクションを実行します。この点では、say ステートメントの動作と非常によく似ています。
これはめったに使用されず、主にポップアップ ウィンドウのように、プレイヤーがモーダルフレームの外側をクリックすると、モーダルフレームが解除されるようにするために使用されます。
これは以下のプロパティーを受け取ります。 :
- action link
dismiss がアクティベートされたときに処理されるアクションです。このプロパティーは必ず必要です。
- modal link
dimiss はデフォルトではモーダルであり、その「後ろ」の displayable によってイベントが処理されるのを防ぎます。
以下も受け取ります。 :
hover_sound
とactivate_sound
スタイルプロパティー
ここに 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
textalign 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 は利用可能な領域をすべて使用しますが、 xmaximum
や ymaximum
プロパティーを使用すればこれを変更できます。
子はそれぞれの位置スタイルプロパティーに従って配置されます。適切に位置が指定されていないと、これらは重なり合ってしまうかもしれません。
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
これはその子をグリッドに表示します。各子には最大のサイズの子と同じサイズの領域が与えられます。
二つのパラメーターを受け取ります。最初の要素はグリッドの縦の列の数で、第二要素はグリッドの横の列の数です。グリッドが満たされなければ、残りのセルは null
Displayable で埋められます。
Grid は 1 つのプロパティーを受け取ります。 :
- transpose link
デフォルトは 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"
Input link
テキスト入力をする領域を作成し、ユーザーがテキストを入力できるようにします。ユーザーが Enter を押すと、テキストがインタラクションから返されます (call screen
からスクリーンを呼び出したときは _return
変数に結果が代入されます) 。
Android や ウェブプラットフォームではサポートするライブラリーの制限により、 input Displayable はアルファベット文字に制限されます(訳注 こちら にカナ漢字変換対応のスクリーンキーボードを用意しました。)。
input ステートメントはパラメーターを受け取らず、以下のプロパティーを受け取ります。 :
- value link
この input が使用する input value オブジェクトです。 InputValue オブジェクトはデフォルト値、テキスト変更、エンター押下時の動作、テキストがデフォルトで変更可能かどうかを決定します。
これは default や changed と同時に指定してはいけません。
- default link
入力されるデフォルトのテキストです。
- length link
入力されるテキストの最大の長さです。
- pixel_width link
入力の最大ピクセル幅です。入力した文字がこの幅を越えると、そのキー入力は無視されます。
- allow link
入力できる文字を含む文字列です (デフォルトではすべての文字が許可されます )。
- exclude link
入力出来ない文字を含む文字列です。 (デフォルトでは「{}」です。 )
- copypaste link
True なら、この入力へのコピーとペーストが可能になります(デフォルトでは無効です)。
- prefix link
ユーザーが入力したテキストの先頭に追加される文字列です。
- suffix link
ユーザーが入力したテキストの末尾に追加される文字列です。
- changed link
ユーザーが入力した文字列を引数に、文字列が変更したときに呼ばれる python 関数です。
- mask link
テキストに表示される各文字を置き換える文字列です。これはパスワードのマスクに使用されます。
- caret_blink link
False またはデフォルトキャレットの点滅期間です。
config.input_caret_blink
を上書きします。
- multiline link
True なら、キーボードを使用してキャレットを次の行に移動できます (デフォルトでは Shift+Enter であり、 config.keymap['input_next_line'] で変更できます )。
- action link
None でない場合、inputがアクティブなときにenter キーが押されると実行されるアクションです。これは、入力された値を返すデフォルトのアクションを上書きします。
通常、これは入力を変数に格納する value とともに使用されるので、そのアクションは変数にアクセスできます。
以下も受け取ります。 :
これは子を受け取りません。
screen input_screen():
window:
has vbox
text "Enter your name."
input default "Joseph P. Blow, ESQ."
Key link
これはあるキー、または指定したリストのどれかのキーが押されるとあるアクションを実行するキーバインドを作成します。 キーはここではジョイスティックやマウスイベントも含む大まかな意味で使用されています。
key はパラメーターを一つ受け取り、それは関連づけるキーの文字列です。利用可能なキーについては キーマップのカスタマイズ の章を参照してください。これは1つのプロパティーを受け取ります:
- action link
これはキーが押されると実行されるアクションを与えます。このプロパティーは必ず必要です。
- capture link
デフォルトでは 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 link
ボタンテキストに使用されるスタイルの名前です。これが指定されず、さらに style プロパティーが文字列なら、「 _text 」がその文字列に追加されてデフォルトのテキストスタイルになります。
以下も受け取ります。 :
子は受け取りません。
screen display_preference():
frame:
has vbox
label "Display"
textbutton "Fullscreen" action Preference("display", "fullscreen")
textbutton "Window" action Preference("display", "window")
Mousearea link
マウスエリアはマウスの出入りに反応できるスクリーンの領域です。ボタンと違ってマウスエリアはフォーカスを受け取らないので、その内部にボタンを持つマウスエリアも可能です。 mousearea
ステートメントはパラメーターを受け取らず、以下のプロパティーを受け取ります。 :
- hovered link
マウスエリアにマウスが入ると実行されるアクション
- unhovered link
マウスエリアからマウスが出ると実行されるアクション
- focus_mask link
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 link
指定するならばこれは後述するように (x, y, w, h) の形の矩形であるべきす。これに対し、その子が相対指定で配置されます。
- focus link
指定するならこれは文字列であるべきです。この文字列は
GetFocusRect()
相当な物に渡され、その矩形を探します。その名前のフォーカスされた矩形が見つかれば、子が描画されます。これに "tooltip" を渡せば、ツールチップを表示している間中、最後にフォーカスされた位置を使用します。
- prefer_top link
指定するとその子をフォーカスされた矩形上部に優先的に配置されます。
以下も受け取ります。 :
Nearrect は他のレイアウトと異なり、その子をその内部ではなく指定の矩形の近くに配置します。その子はまずは利用可能な幅全体とその矩形の上と下の高さの最大値で描画されます。 y 座標は次のように算出されます。
その子が矩形の上部におさまり、かつ prefer_top が指定されていれば、矩形のすぐ上に配置されます。
そうではなく、子が矩形の下に収まれば、矩形直下に配置されます。
それ以外の場合、子は矩形のすぐ上に配置されます。
x 座標は通常の規則で計算され、子の xpos
と xanchor
プロパティー、および xalign
のようにそれらを設定するプロパティーが使用されます。 位置プロパティーは矩形のx座標に対する相対値であり、浮動小数点の場合は幅に対する割合です。
最後に、 xoffset
と yoffset
プロパティーは通常通り適用されます。
nearrect の子が transform だった場合、その transform には show
と hide
イベントが与えられますが、位置は即座に変更されます。 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
# to be at the top level, and the last thing shown, 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 link
ピクセル数での空白の幅です。
- height link
ピクセル数での空白の高さです。
以下も受け取ります。 :
子は受け取りません。
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 link
グリッドの縦横の列の間のスペース
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
Timer link
これは時間が来るとアクションを実行するタイマーを作成します。これは位置パラメーターを一つ受け取り、それは秒数です。以下のプロパティーも受け取ります。 :
- action link
時間が来ると実行するアクションを指定します。このプロパティーは必須です。
- repeat link
True ならその時間が経つ度にタイマーが繰り返し実行されます。
- modal link
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 link
レンダリングのために子に指定されるサイズで、 (xsize, ysize) のタプルです。子が自身のサイズを算出できるとき、これは通常省略されます。どちらかの要素が None なら子のサイズが使用されます。
- mousewheel link
これはつぎのうちの一つです
- False
マウスホイールを無視します (デフォルト)。
- True
縦にスクロールします。
- "horizontal"
水平にスクロールします。
- "change"
viewport が動くときのみ、viewport を縦にスクロールします。そうでないなら、マウスホイールイベントは残りのインターフェースに渡されます(例えば、changeが指定されていて、
key "viewport_wheeldown" action Return()
がviewportの前に記述されていれば、 viewport が下端に達しているならそのスクリーンに処理を返させるようにできます)。- "horizontal-change"
Change モードと水平スクロールを組み合わせます。
- draggable link
True なら、マウスのドラッグが viewport をスクロールします。これには variant も指定出来、その場合、 viewport はその variant が有効なら draggable となります(例
draggable "touch"
) 。
- edgescroll link
マウスが viewport の端に到達するとスクロールします。 None を設定するか、2要素か3要素のタプルを設定します :
タプルの最初の要素は viewport の端からのピクセル数での距離であり、その距離からエッジスクロールが開始されます。
第二要素は一秒ごとに何ピクセルスクロールするかの最大値です。
与えられるなら三番目の要素はスクロールのスピードをマウスポインターと端との距離に基づいて調整する関数です。関数は -0.0 から 1.0 までの範囲の数字を引数に受け取り、同じ範囲の数字を返すべきです。デフォルトの関数では入力をそのまま返し、端との近さに比例してスクロールを加速させます。関数が入力された符号に基づき 1.0 か -1.0 を返すと一定の速度のスクロールになります。
- xadjustment link
ui.adjustment()
が viewport の x 軸に使用されます。省略されると新しい adjustment が作成されます。
- yadjustment link
ui.adjustment()
が viewport の y 軸に使用されます。省略されると新しい adjustment が作成されます。
- xinitial link
viewport の初期の水平位置のオフセットです。これはピクセル数の整数か、可能なオフセットの割合の小数です。
- yinitial link
viewport の初期の垂直位置のオフセットです。これはピクセル数の整数か、可能なオフセットの割合の小数です。
- scrollbars link
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 link
True なら viewport は上下左右の矢印キーでスクロール可能です。これはフォーカスを変更する通常のこれらのキーの機能に優先します。しかし、viewportが端に到達すると矢印キーはフォーカスを変更します。
- pagekeys link
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 には col か rows の少なくとも一つのプロパティーが指定されなければいけません。一つが省略されるか None であれば、サイズと spacing, 子の数から自動的に決定されます。 row または column が満たされていなければ、 null
Displayable を使用して残りのスペースを埋めます。
Vgrids は以下のプロパティーを受け取ります。 :
- cols link
グリッドの行数
- rows link
グリッドの列数
- transpose link
True なら列の前に行が埋められます。これのデフォルトは cols と rows プロパティーに依存します。 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 link
この imagemap に使用する画像を自動的に定義するために使用されます。これは %s を含む文字列であるべきです。これが与えられて、画像のプロパティーの一部が省略されていると %s をそのプロパティーの名前で置き換えて、その値をそのプロパティーのデフォルトとして使用します。
例えば auto が "imagemap_%s.png" で idle が省略されると、 idle はデフォルトで "imagemap_idle.png" になります。同様に auto が "imagemap %s" なら
imagemap idle
画像が使用されます。auto の動作は
config.imagemap_auto_function
を変更してカスタマイズできます。
- ground link
hotspot や hotbar の一部ではない画像を配置するために使用される画像
- insensitive link
hotspot や hotbar が無効の時に使用される画像
- idle link
hotspot が選択されておらず、フォーカスを持たないとき、また hotbar がフォーカスを持たずバーが空のときに使用される画像
- hover link
hotspot が選択されておらず、フォーカスを持つとき、また hotbar がフォーカスを持ちバーが空のときに使用される画像
- selected_idle link
hotspot が選択され、フォーカスを持たないとき、また hotbar がフォーカスを持たずバーが満タンのときに使用される画像
- selected_hover link
hotspot が選択され、フォーカスを持つとき、また hotbar がフォーカスを持ちバーが満タンのときに使用される画像
- alpha link
これはデフォルトでは True で、 hotspot はマウスが画像の不透明な領域上にあるときだけフォーカスを持ちます。 False なら hotspot はマウスが長方形の領域上にあるとフォーカスを持ちます。
- cache link
これはデフォルトでは True で、 hotspot のデータをキャッシュして追加のディスク消費の代わりにパフォーマンスを改善します。
以下のプロパティーを受け取ります。 :
imagemap は fixed を作成し、 ( hotspot と hotbar だけでなく ) すべての子をそこに追加します。
Hotspot link
hotspot は画像で構成されるボタンです。ボタンを作成する imagemap の領域を与えるタプル (x, y, width, height) をパラメーターとして一つ受け取ります。これは以下のプロパティー受け取ります。 :
- action link
ボタンがアクティベートされると実行されるアクションです。これはボタンが有効か、選択されているかどうかの制御もします。
- alternate link
ボタンが代替方法でアクティベートされると実行される代替アクションです。代替方法はプレイヤーがマウスベースのプラットフォームでホットスポットを右クリックするか、タッチベースのプラットフォームで長押しすると発生します。
- hovered link
ボタンがフォーカスを所得するときのアクションです。
- unhovered link
ボタンがフォーカスを失うときのアクションです。
- selected link
ボタンが選択されているかどうかを決定する式です。この式はインテラクション毎に少なくとも一回評価されます。 指定されないか None ならば、アクションが選択状態決定に使用されます。
- sensitive link
ボタンが有効かどうかを決定する式です。この式はインテラクション毎に少なくとも一回評価されます。 指定されないか None ならば、アクションが有効無効決定に使用されます。
以下も受け取ります。 :
hotspot は fixed を作成し、そこに子を追加出来るようにします。 fixed は hotspot と同じ大きさの領域を持つので、子は hotspot に対する相対距離で配置されます。
hotspot に alt
スタイルプロパティーを指定すると Ren'Py のセルフボイシング機能が動くようになります。
Hotbar link
hotbar は画像で構成されるバーです。バーを作成する imagemap の領域を与えるタプル (x, y, width, height) をパラメーターとして一つ受け取ります。これは以下のプロパティー受け取ります。 :
- range link
バーの最大値です。これは value が数字なら必要です。
- adjustment link
このバーを調整する
ui.adjustment()
オブジェクトです。
value か adjustment のどちらかは与えられなければなりません。さらにこの機能は以下を受け取ります。 :
これは子は受け取りません。
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 のステートメントは次になります。 :
Areapicker link
開発ツールでの使用が意図されたもので、ユーザーがスクリーン上に矩形領域を選択できます。以下のプロパティーを受け取ります。 :
- cols link
デフォルトではNone であり、 None でなければ、スクリーンをこの行の数のグリッドに分割します。
- rows link
デフォルトではNone であり、 None でなければスクリーンをこの列の数のグリッドに分割します。
- position link
デフォルトではNone であり、 None でなければ、これはユーザーが最初にクリックしたグリッドで丸められた x, y 座標で呼び出される関数です。
- changed link
ユーザーが選択領域を変更するたび、 (x, y, width, height) タプルで表現される矩形で呼び出されます。
- finished link
ユーザーが領域の選択を終えると (x, y, width, height) タプルで表現される矩形で呼び出されます。
- persist link
True なら選択が完了されるとその選択領域に子が表示されます。デフォルトでは False であり子は一旦選択が完了されると非表示されます。
以下のグループのプロパティーを受け取ります。 :
areapicker は子を1つ受け取ります。その子はスクリーン上の選択された領域に表示されます。
Drag link
そのスクリーン周りでドラッグできる Drag
を作成します。スクリーン言語に提供される d を除き、これはそのクラスで定義されたすべてのプロパティーを受け取ります。
次のプロパティーも受け取ります。 :
hover_sound
とactivate_sound
スタイルプロパティーfocus_mask
スタイルプロパティー
drag に子を 1 つ与えるか、 child
スタイルプロパティーを使用して子や、それがフォーカスを所得した場合のバージョンを提供できます。
Draggroup link
DragGroup
を作成します。これは DragGroup
と同じプロパティーと、次のプロパティーも 受け取ります。 :
ドラッググループは子として 0 以上の Drag を受け取ります。 drag でないものも子として受け取れ、その場合、 fixed のように機能します。
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
節をサポートしていません( continue
と ``break` ステートメントはサポートします)。変数同様に(任意にネストされた)タプルへの代入もサポートしています。
$ 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 renpy.is_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
ステートメントはスクリーンを表示します。スクリーン名と任意の一連の節、任意の Python 引数を受け取り、スクリーンに渡します。 show_screen()
と call_screen()
は追加の特別なキーワードも受け取ります。
show screen
ステートメントは次の節を受け取り、それらの一部は show ステートメント の節と類似します。 :
as
as
節は名前を受け取ります。指定されないとそのスクリーンに関連付けられたタグがデフォルトとなります (screen ステートメント を参照してください)。それも指定されていないと、スクリーンの名前がデフォルトとなります。onlayer
スクリーンを表示するレイヤーです。
zorder
そのスクリーンを表示する zorder です。指定されないとそのスクリーンに関連付けられた zorder がデフォルトとなります (screen ステートメント を参照してください)。それも指定されていないと、 0 がデフォルトとなります。
expression
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")
with
show screen
ステートメントの with 節と同様に解釈されます。show screen clock_screen with dissolve
nopredict
nopredict
キーワードは値を受け取りません。スクリーンの予測を禁止します。スクリーンの予測中にスクリーンへの引数は評価されます。スクリーン引数の評価が不測の副作用を起さないように確認してください。警告
スクリーンの引数の評価が副作用を起すなら、あなたのゲームは予測しない方法で動作するかもしれません。
このように表示されたスクリーンは明示的に非表示にされるまで表示されます。これによりそれらで意図的に上書きが出来ます。
show screen overlay_screen
show screen clock_screen(hour=11, minute=30)
if rare_case:
show rare_screen nopredict
Hide Screen link
hide screen
ステートメントを使用して現在表示されているスクリーンを非表示します。スクリーンタグを受け取ります。まず指定されたタグを指定のレイヤーで探そうとし (onlayer
節を参照してください)、見つからなければ、そのスクリーンが表示されたタグに関係なくそのレイヤー上の元のスクリーン名で探します。それでも見つからなければ何もしません。
show screen A
show screen B as A # B replaces A (which hides it)
hide screen A # hides B, tagged as A
show screen A as B
show screen B as C
hide screen B
# hides the A screen, shown as B
# the B screen, shown as C, stays shown
hide screen B
# hides the B screen
It also takes the onlayer
clause, which defaults to the screens
layer.
with 節は show ステートメント の show
節と同様に解釈されます。
show screen
ステートメントと同様に、 hide screen
も expression
キーワードを受け取り、任意の式をスクリーン名として使用できます。
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 ステートメントは様々な任意の節を受け取られ、それらの殆どは Show Screen のものと類似します。 :
as
as
節は名前を受け取ります。指定されないとそのスクリーンに関連付けられたタグがデフォルトとなります (screen ステートメント を参照してください)。それも指定されていないと、スクリーンの名前がデフォルトとなります。onlayer
スクリーンを表示するレイヤーです。
zorder
そのスクリーンを表示する zorder です。指定されないとそのスクリーンに関連付けられた zorder がデフォルトとなります (screen ステートメント を参照してください)。それも指定されていないと、 0 がデフォルトとなります。
nopredict
このキーワードはスクリーンの予測を近視します。スクリーンの予測中にスクリーンへの引数は評価されます。スクリーン引数の評価が不測の副作用を起さないように確認してください。
警告
スクリーンの引数の評価が副作用を起すなら、あなたのゲームは予測しない方法で動作するかもしれません。
expression
show screen
ステートメントと同様に、call screen
もexpression
キーワードを受け取り、任意の式をスクリーン名として使用できます。スクリーンへ引数を渡すpass
キーワードも同様です。with
call screen ステートメントで、
with
節はそのスクリーン表示時にトランジションを起こさせます。
スクリーンの呼び出しはインタラクションであり、インタラクションは暗黙に with None
を伴うため、 call screen
の後に with
ステートメントを続けてもすでにそのスクリーンは表示されていないため、トランジションを使用してスクリーンを消しません。暗黙の with None
トランジションを無効にするには、特別なキーワード引数 _with_none=False
を以下の例のようにスクリーンに渡してください。
[ With(dissolve), Return() ]
アクションリストのようなトランジションを発生させる他の方法も動作します。
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 の拡張までがあります。