スクリーンと Python link
スクリーン関数 link
次の関数はスクリーンに関連する様々な処理をサポートします。
- renpy.call_screen(_screen_name, *args, _with_none=True, _mode='screen', **kwargs) link
プログラム的には call screen ステートメントに相当します。
これはスクリーンとして _screen_name を表示し、インタラクションを実行します。スクリーンはインタラクションが終わると非表示になり、インタラクションの結果が返されます。
_ で始まらない位置引数、キーワード引数はスクリーンに渡されます。
キーワード引数 _with_none が False なら「 with None 」はインタラクションの終わりに実行されません。
キーワード引数 _mode があれば、それがこのインタラクションのモードになり、そうでなければ "screen" モードになります。
- renpy.current_screen() link
現在更新または描画、処理中のスクリーンに対する情報を返します。
返されたオブジェクトのドキュメントに記載されたフィールドは
get_screen()
を参照してください。
- renpy.get_adjustment(bar_value) link
指定の bar_value,
BarValue
から、使用しているui.adjustment()
を返します。 adjustment には以下の定義された属性があります。:- value link
バーの現在の値です。
- range link
バーの現在の範囲です。
- renpy.get_displayable(screen, id, layer=None, base=False) link
layer 上の screen から id を持つ ウィジェットを返します。スクリーンが存在しないか、そのスクリーン上にその id を持つウィジェットが存在しなければ None を返します。
- renpy.get_displayable_properties(id, screen=None, layer=None) link
layer 上の screen にある id のウィジェットのプロパティーを返します。screen が None なら、現在のスクリーンに対するプロパティーを返します。これは python やスクリーン内のプロパティーコードから使用出来ます。
これはそのウィジェットのプロパティーを持つ辞書を返すので、そこから各プロパティーを所得出来ることに注意してください。
- renpy.get_screen(name, layer=None) link
与えられた name を持つ layer 上のスクリーンの情報を返します。 name は画像タグとして解釈され、なければスクリーンの名前と解釈されます。そのスクリーンが表示されていなければ None が返されます。
name は name のリストでもかまいません、その場合表示されている最初のスクリーンが返されます。
この関数を使用してスクリーンが表示されているかチェック出来ます。例
if renpy.get_screen("say"): text "The say screen is showing." else: text "The say screen is hidden."
この関数から返されたオブジェクトはフィールドのうち、次のフィールドを記載します :
- layer link
スクリーンを表示するためのレイヤーです。
- name link
表示するスクリーンの名前です。
- zorder link
スクリーンが表示される zorder です。
警告
他の同様の関数と同様に、この関数が返すオブジェクトは、関数が呼び出されてからの短期的な使用を意図しています。このオブジェクトのセーブデータへの保存やロールバックへの参加は推奨されません。
- renpy.get_screen_variable(name, *, screen=None, layer=None) link
スクリーンのスコープ内の変数の値を返します。
- name
返す変数の名前です。
- screen
変数を返すスクリーンの名前です。 None なら現在のスクリーンが使用されます(現在のスクリーンはスクリーンの更新時とスクリーン内で実行されるアクション内でのみ定義されます)。
- layer
screen が None でなければスクリーンを探すためのレイヤーです。
- renpy.hide_screen(tag, layer=None, immediately=False) link
プログラム的に hide screen ステートメントに相当します。
layer 上の tag を持つスクリーンを非表示にします。
immediately が True の場合、その screen はすぐに非表示になり、 on hide イベントは発生しません。
- renpy.set_focus(screen, id, layer='screens') link
screen 中の id を持つ displayable にフォーカスを試みます。これはその Displayable が見つからなければ失敗し、そのウィンドウはフォーカスされないか、他のものにフォーカスします。
この呼び出しが処理されると僅かでもマウスが移動するとフォーカスは変化します。
- renpy.set_screen_variable(name, value, *, screen=None, layer=None) link
あるスクリーンのスコープにある変数の値を設定します。これは変数の値を即座には更新しないことに注意してください。
renpy.restart_interaction()
を呼び出してアップデートしてください。- name
設定する変数名です。最適化が他の変数に対する変更を見えなくすることがあるため、これは Default ステートメントで作成された変数であるべきです。
- value
変数を設定する値です。
- screen
変数を返すスクリーンの名前です。 None なら現在のスクリーンが使用されます(現在のスクリーンはスクリーンの更新時とスクリーン内で実行されるアクション内でのみ定義されます)。
- layer
screen が None でなければスクリーンを探すためのレイヤーです。
- renpy.show_screen(_screen_name, *args, _layer=None, _zorder=None, _tag=None, _widget_properties={}, _transient=False, **kwargs) link
プログラム的には show screen ステートメントに相当します。
その名前のスクリーンを表示します。これは以下のキーワード引数を受け取ります。 :
- _screen_name
表示するスクリーンの名前です。
- _layer
スクリーンを表示するレイヤーです。これは Show Screen ステートメントの
onlayer
節に相当します。- _zorder
スクリーンを表示する zorder です。指定されなければそのスクリーンのデフォルトの zorder になります。それもなければ 0 になります。
- _tag
表示するスクリーンのタグになります。指定されなければそのスクリーンのデフォルトのタグです。それもなければデフォルトでそのスクリーンの名前になります。
これは Show Screen ステートメントの
as
節に相当します。- _widget_properties
ウィジェットの id をキーとする辞書であり、その値はプロパティー名をキーにその値を値とする辞書です。その id のウィジェットがスクリーンによって表示されると、指定したプロパティーがそこに追加されます。
- _transient
True ならスクリーンは現在のインタラクションが終わると自動的に非表示になります。
アンダースコア (_) で始まらない位置引数とキーワード引数はそのスクリーンに渡されます。
- renpy.start_predict_screen(_screen_name, *args, **kwargs) link
_screen_name という名のスクリーンを指定された引数で表示したときの予測を Ren'Py に開始させます。これは _screen_name の以前の予測を置き換えます。スクリーンの予測を停止するためには
renpy.stop_predict_screen()
を呼び出してください。予測は通常のゲームプレイ中ずっと発生します。予測の完了を待つには、 predict 引数に
renpy.pause()
を使用してください。
- renpy.stop_predict_screen(name) link
name という名のスクリーンの予測を停止させます。
- renpy.variant(name) link
name が現在 Ren'Py に実行されているスクリーン variant なら True を返します。詳細は スクリーン variant を参考にしてください。この関数を if ステートメントで条件に使用して、選択したスクリーン variant に対して振る舞いを変更出来ます。
name はスクリーン variant のリストでもかまいません、その場合この関数はそのどのスクリーン variant が選択されても True を返します。
- class ui.adjustment(range=1, value=0, step=None, page=None, changed=None, adjustable=None, ranged=None, force_step=False, raw_changed=None) link
adjustment オブジェクトは bar や viewport によって調整される値を表します。これは値や値の範囲、 step と page での値の調整法についての情報を含みます。
以下のパラメーターは adjustment オブジェクトのフィールドやプロパティーに対応します。 :
- range
adjustment の範囲で、数字です。
- value
adjustment の値で、数字です。
- step
adjustment の一つの step のサイズで、数字です。 None ならデフォルトでは page が設定されていればその10分の1で、そうでなければ range の10分の1です。
これはマウスホイールで viewport をスクロールするときに使用されます。
- page
adjustment の page あたりのサイズです。 None ならこれは viewport により自動的に設定されます。もし設定されなければ、デフォルトで range の10分の1です。
スクロールバーをクリックすると使用されます。
以下のパラメーターは adjustment の動作を制御します。
- adjustable
True ならこの adjustment はbar から変更できます。 False なら出来ません。
デフォルトでは changed 関数が与えられているか adjustment が viewport に関連づけられていれば変更可能で、そうでなければ出来ません。
- changed
この関数は adjustment の値が変更されるとその新しい値を引数に呼び出されます。
- raw_changed
この関数は、 adjustment の値が変更されたときに呼び出されます。 changed とは異なり、この関数は生の値を引数に呼び出されますが、これは範囲外である可能性があります。これは、 adjustment と新しい値の 2 つの引数で呼び出されます。
- ranged
この関数は adjustment の range が viewport によって設定されると adjustment オブジェクトを引数に呼び出されます。
レイアウトの過程でこの関数は複数回呼び出されます。
- force_step
adjustment が viewport や bar に対応する draggable で変更され、かつこれが True ならばドラッグが次のステップに達したときのみ値が変更されます。 adjustment が viewport や bar に対応する draggable で変更され、かつこれが "release" ならば、 draggable の解放時、値は最も近いステップに丸められます。 False ならばこの adjustment はステップの値を無視します。
- change(value) link
adjustment の値を value に変更し、その adjustment を使用しているすべての bar や viewport が更新されます。
- ui.interact(*, roll_forward=None, mouse='default') link
ユーザーとのインタラクションを起し、その結果を返します。これは Ren'Py にスクリーンを再描画させ入力イベントの処理を開始します。 displayable がイベントに対して値を返すと、その値は ui.interact から返され、インタラクションは終了します。
この関数は滅多に直接呼び出されません。 say ステートメントや menu, with pause, call screen ステートメント含む Ren'Py の一部、
renpy.input()
などの多くの関数から通常呼び出されます。しかし必要なら直接呼び出せます。インタラクション終了時、 transient レイヤーと transient が True として表示されたすべてのスクリーンはそのシーンリストから除去されます。
以下の引数はドキュメントに記載されています。ドキュメントに記載されていない引数は Ren'Py 内部で使用するために存在するのですべての引数はキーワード引数として渡してください。
- roll_forward
ロールバック時にこの関数から返される情報です( None ならロールフォワードは無視されます)。これには通常
renpy.roll_forward_info()
関数の結果が渡されるはずです。- mouse
この関数を実行中のマウスカーソルのスタイルです。
アクション link
スクリーン言語で作成された displayable の多くは引数としてアクションを受け取ります。アクションは以下の三つのうちいずれかです。 :
引数を受け取らない呼び出し可能な ( 関数や bound method のような ) python オブジェクト
Action クラスを継承するクラスのオブジェクト
他のアクションのリスト
Action クラスを継承する利点はボタンが有効か、選択されているかを設定するメソッドを上書き可能なことです。
- class Action link
新しいアクションを定義するためにはこのクラスを継承してください。アクションの動作を変更するためにはこのクラスのメソッドを上書きしてください。
- __call__(self) link
これはアクションがアクティベートされると呼び出されるメソッドです。多くの場合 None でない値を返すと、現在のインタラクションが終了します。
このメソッドはデフォルトでは NotImplemented の例外を出す ( Ren'Py にエラーを報告させる ) ため、上書きする必要があります。
- get_sensitive(self) link
これはこのアクションに関連づけられたボタンが有効かどうかを決定するために呼び出されます。ボタンが有効なら True を返すべきです。
これが False を返しても __call__ は実行されることに注意してください。
デフォルトでは True を返します。
- get_selected(self) link
これはボタンが選択された状態でレンダリングされるべきなら True を返し、そうでないなら False を返すべきです。
デフォルトでは False を返します。
- get_tooltip(self) link
特定のツールチップが代入されていなければこのボタンのデフォルトのツールチップを所得します。ツールチップの値または ツールチップが分からなければ None を返します。
デフォルトでは None を返します。
- periodic(self, st) link
このメソッドは各インタラクションが開始されると一旦呼び出され、その後も継続的に呼び出されます。数字を返すとその秒数が経過すると、そうでないならすぐに呼び出されます。
これの主な使用法は get_selected や get_sensitive の値が変更されたら
renpy.restart_interaction()
を呼び出すことです。引数を一つ受け取ります。
- st
このアクションに関連づけられたスクリーンか displayable が最初に表示されてからの秒数です。
- unhovered(self) link
アクションがボタン ( または同様なオブジェクト ) への hovered パラメーターとして使用されると、このメソッドはそのオブジェクトがフォーカスを失うと呼び出されます。
- alt link
このアクションを使用するボタンに:propref:alt プロパティーが設定されていなければ、そのボタンに対して読み上げられるテキストとなります。これはそのクラスやそのコンストラクターの文字列、文字列を返す python プロパティーにできます。
pythonからアクションを実行するには renpy.run()
を使用してください。
- renpy.is_selected(action) link
提供された action や action のリストが選択状態なら True を返し、そうでないなら False を返します。
- renpy.is_sensitive(action) link
提供された action や action のリストが選択可能状態なら True を返し、そうでないなら False を返します。
- renpy.run(action) link
アクションまたはアクションのリストを実行します。単体のアクションは引数なしで呼び出され、アクションのリストはこの関数で順番に実行されます。 None は無視されます。
最後のアクションの結果の値を返します。
BarValue link
bar, vbar または hotbar 作成時に BarValue オブジェクトは value 引数に提供されます。 BarValue オブジェクトのメソッドは adjustment やスタイルを得るために呼び出されます。
- class BarValue link
新しい BarValue を定義するためには、このクラスを継承してそのメソッドを上書きしてください。
- get_adjustment(self) link
このメソッドは bar の adjustment オブジェクトを得るために呼び出されます。
ui.adjustment()
で adjustment を作成し、作成されたオブジェクトを返します。このメソッドはデフォルトでは NotImplemented の例外を出す ( Ren'Py にエラーを報告させる ) ため、上書きする必要があります。
- get_style(self) link
これはこの値を使用する bar のスタイルを決定するために使用されます。二つのスタイル名か、 style オブジェクトのタプルを返すべきです。第 一要素は bar に、第二要素は vbar に使用されます。 :
これはデフォルトで ("bar", "vbar") です。
- get_tooltip(self) link
特定のツールチップが代入されていなければこのボタンのデフォルトのツールチップを所得します。ツールチップの値または ツールチップが分からなければ None を返します。
デフォルトでは None を返します。
- replaces(self, other) link
これはスクリーンが更新される時のように、 BarValue が他の BarValue を置き換えるときに呼び出され、 other からこの BarValue に更新するために使用されます。 get_adjustment より前に、呼び出されます。
other は self と同じ型である必要はありません。
- periodic(self, st) link
このメソッドは各インタラクションの開始時に一度呼び出され、秒数の数字を返すとその時間が経過した後に、そうでなければすぐに再び呼び出されます。 これは get_adjustment の後に呼び出されます。
AnimatedValue()
のように時間につれて bar の値を更新するために使用されます。このためには、 get_adjustment で adjustment を保持し、 periodic で adjustment の changed メソッドを呼び出すべきです。
- alt link
この BarValue を使用するボタンに:propref:alt プロパティーが設定されていなければ、そのバーに対して読み上げられるテキストとなります。これはそのクラスやそのコンストラクターの文字列、文字列を返す python プロパティーにできます。
InputValue link
input 作成時に、 InputValue オブジェクトは value プロパティーとして提供されます。 InputValue オブジェクトのメソッドは テキストの設定と所得、編集可能かどうか、エンターキーが押されたときの処理を決定するために呼び出されます。
- class InputValue link
新しい InputValue を定義するためには、このクラスを継承してそのメソッドを上書きしてください。
- editable link
True でないならば、入力欄を無効化します。
- default link
Trueなら、input はデフォルトで編集可能な状態です(スクリーン表示時に、キャレットが与えられます)。
- get_text(self) link
入力されたテキストを返します。これは実装されなければいけません。
- set_text(self, s) link
入力されたテキストが変更されると、新しいテキストで呼び出されます。これは実装されなければいけません。
- enter(self) link
ユーザーがエンターを押すと呼び出されます。これが None 以外を返すと、その値がインタラクションから返されます。これは
renpy.IgnoreEvent()
イベントを投げて押下を無視させられます。そうでなければ、他の displayable にエンターキーの押下が伝達されます。
以下のアクションは InputValue で利用可能なメソッドです。 :
- Enable() link
テキストを編集可能にするアクションを返します。
- Disable() link
テキストを編集不能にするアクションを返します。
- Toggle() link
テキストが編集可能かをトグルするアクションを返します。
ユーザー定義スクリーン言語ステートメント link
Ren'Py はユーザー定義スクリーン言語ステートメントをサポートしています。ユーザー定義スクリーン言語ステートメントはスクリーン言語の use ステートメント に対するラッパーです。位置引数はそのまま位置引数になり、プロパティーはキーワード引数になり、ステートメントがブロックを受け取ると、use ステートメント同様に処理します。例えば次のユーザー定義スクリーン言語ステートメントは
titledwindow "Test Window":
icon "icon.png"
text "This is a test."
こうなります。
use titledwindow("Test Window", icon="icon.png"):
text "This is a test."
ユーザー定義スクリーン言語ステートメントは python early
ブロックで登録されなければなりません。また、そのユーザー定義ステートメントがあるファイル名はそれを使用するどのファイルよりも先に読み込まれなけれなければなりません。Ren'Py はファイルをパスのユニコード順に読み込むので、ユーザー定義ステートメントを登録するファイル名の先頭に 01 や小さい数を付けるとよいです。
ユーザー定義スクリーン言語ステートメント renpy.register_sl_statement 関数で登録されます。 :
- class renpy.register_sl_displayable(name, displayable, style, nchildren=0, scope=False, *, replaces=False, default_keywords={}, default_properties=True, unique=False) link
displayable を作成するユーザー定義のスクリーン言語ステートメントを登録します。
- name
スクリーン言語ステートメントの名前でと Ren'Py のキーワードを含む文字列です。このキーワードは新しいステートメントを導入するために使用されます。
- displayable
これは関数で、呼び出されると displayable オブジェクトを返します。すべての位置引数、プロパティーとスタイルプロパティーはこの関数へ引数として渡されます。その他のキーワード引数も以下のようにこの関数へ渡されます。
これは displayable を返すべきです。 複数の displayable を返すと最も外側の displayable の _main 属性が "main" displayable に設定され、子はこれに追加されます。
- style
この displayable のスタイルのベース名です。 スタイルプロパティーが指定されないと、これにスタイル接頭辞を追加します。結果のスタイルが displayable 関数に
style
キーワード引数として渡されます。- nchildren
この displayable の子の数で、次のうちのひとつです。 :
- 0
displayable は子を受け取りません。
- 1
displayable はひとつ子を受け取ります。ひとつ以上の子が与えられると、子は Fixed に配置されます。
- "many"
displayable ひとつ以上の子を受け取ります。
- unique
関数が他のどこからも参照されない Displayable を返すなら True にするべきです。
以下の引数はキーワード引数を使って渡されるべきです。
- replaces
True で、 displayable が以前の displayable を置き換えるなら、新しい displayable に対するパラメーターとしてその displayable は渡されます。
- default_keywords
その displayable に与えられるキーワード引数のデフォルトの設定です。
- default_properties
True なら ui と position プロパティーがデフォルトで追加されます。
以下のメソッドを呼び出して、追加する位置引数とプロパティーを指定出来るオブジェクトを返します。それらの各メソッドは同様に呼び出せるオブジェクトを返し、メソッドをひとつなぎに出来ます。
- add_positional(name) link
name の位置引数を追加します。
- add_property(name) link
name のプロパティーを追加します。プロパティーはキーワード引数として渡されます。
- add_style_property(name) link
name で終り、さまざまなスタイルプロパティー接頭辞を接頭辞にするプロパティーの一群を追加します。例えば ("size") で呼び出されると、size, idle_size, hover_size などを定義します。
- add_prefix_style_property(prefix, name) link
prefix とスタイルプロパティーの接頭辞、 name で構成された名前を持つプロパティーの一群を追加します。例えば prefix が text_ name が size で呼び出されると、これは text_size, text_idle_size, text_hover_size などを作成します。
- add_property_group(group, prefix='') link
prefix を接頭辞に持つプロパティーのグループを追加します。 Group は次の文字列のうちの一つです。 :
"bar"
"box"
"button"
"position"
"text"
"window"
これらは スタイルのプロパティー のグループに対応します。グループは "ui" にも出来、その場合 共通のUIプロパティー を追加します。
- copy_properties(name) link
name スクリーンステートメントに渡せるすべてのスタイルと位置引数、キーワード引数を追加します。
- class renpy.register_sl_statement(name, children='many', screen=None) link
Ren'Py にユーザー定義のスクリーン言語ステートメントを登録します。
- name
これは単語でなくてはいけません。そのユーザー定義スクリーン言語ステートメントの名前になります。
- children
このユーザー定義ステートメントが受け取る子の数です。これは 0, 1 または 0 以上を表す "many" であるべきです。
- screen
使用するスクリーンです。未指定では name になります。
追加する位置引数とプロパティーを指定出来るオブジェクトを返します。このオブジェクトは
renpy.register_sl_displayable
が返すオブジェクト同様に add_ メソッドを持ちます。
ユーザー定義スクリーン言語ステートメントの例として、上記で指定した titlewindow
ステートメントの実装を示します。先ず、 01custom.rpy のような初期に読み込まれるファイルの python early
ブロックでステートメントは登録されなければなりません。以下のように登録します。
python early:
renpy.register_sl_statement("titledwindow", children=1).add_positional("title").add_property("icon").add_property("pos")
次にユーザー定義ステートメントを実装するスクリーンを定義します。このスクリーンはどのファイルでも定義出来ます。そのようなスクリーンの 1 例です。
screen titledwindow(title, icon=None, pos=(0, 0)):
drag:
pos pos
frame:
background "#00000080"
has vbox
hbox:
if icon is not None:
add icon
text title
null height 15
transclude
add_property_group のような大きなプロパティ―グループを使用するなら、 **properties シンタックスを使用してどこかに properties キーワードを使うとよいです。例
screen titledwindow(title, icon=None, **properties):
frame:
# When background not in properties it will use it as default value.
background "#00000080"
properties properties
has vbox
hbox:
if icon is not None:
add icon
text title
null height 15
transclude