Transform link
transform を使用して displayable を別の displayable にします。数種類の transform とそれらを作成する様々な方法があります。組み込みの transform を使うと画面上のオブジェクトの位置座標を制御出来ます。ユーザー定義の transform では移動、ズーム、回転、複雑な色効果などより複雑な効果を起こせます。
transform は show ステートメントや scene ステートメントに at
節を与えて適用できます。次のコードは、 eileen happy
画像に right
transform を適用します。
show eileen happy at right
複数の transform をコンマで区切って適用できます。それら transform は左から右へ順に適用されます。
show eileen happy at halfsize, right
Python による displayable への transform の適用 link
Python により transform t
を displayable d
に適用する方法はいくつ複数あります :
最も普遍的かつ推奨される方法は
At(d, t)
です(下記参照)。これはすべての transform に対して動作します。d(child=t)
はすべての ATL transform に対して動作します。t(d)
はすべての Python transform と位置パラメーターを持たない ATL transform に対して動作します。
- At(d, *args) link
指定の displayable d に args のそれぞれの transform を適用します。 transform は左から右へ順に適用され、最後に適用される transform は最も右側の引数です。
transform birds_transform: xpos -200 linear 10 xpos 800 pause 20 repeat image birds = At("birds.png", birds_transform)
注釈
transform ステートメント を使用して定義された transform のように、値が指定されていない transform のパラメーターが残っている場合、結果の値は表示できないことがあります。
注釈
結果の値は、さらに別の displayable に適用できる (前の子をオーバーライドする) transform であることがあります。それは ATL transform の場合であり、子が設定されていてさえ transform として使用できます。
組み込み transform link
Ren'Py では、組み込みの transform をいくつか定義しています。これらの transform は、画像を画面上に配置します。組み込みの各 transform がどこに画像を配置するかをここに示します。
+-----------------------------------------------------------+
|topleft, reset top topright|
| |
| |
| |
| |
| truecenter |
| |
| |
| |
| |
offscreenleft|left center, default right|offscreenright
+-----------------------------------------------------------+
offscreenleft
および offscreenright
transform は、画面外に画像を配置します。これらの transform は、画面外に画像を動かすのに使えます (リソースを浪費しないために、後で必ず hide してください)。
transform は次のとおりです:
- center link
画面の中央下に配置します。
- default link
画面の中央下に配置します。
config.default_transform
を再定義して show ステートメントや scene ステートメントによって表示される画像の位置のデフォルトを変更できます。
- left link
画面の左下に配置します。
- offscreenleft link
画面よりも左に配置し、画面下部に合わせます。
- offscreenright link
画面よりも左に配置し、画面下部に合わせます。
- reset link
transform をリセットします。displayable を画面の左上に配置し、ズーム、回転その他の効果を消去します。
- right link
画面の右下に配置します。
- top link
画面の中央上に配置します。
- topleft link
画面の左上に配置します。
- topright link
画面の右上に配置します。
- truecenter link
水平にも垂直にも中央に配置します。
ATL - アニメーションと transform 言語 link
Animation and Transformation Language (ATL) は、アニメーションの作成、画面上での Displayable の移動、位置の設定、 transform の適用などを行える高級言語です。これらは、時間の経過とともに、またイベントに応じて変更できます。
以下の transform ステートメント を使用して作成される ATL transform オブジェクトは displayable であり、そのように使用できます (ただし 子 displayable が設定されていない場合は透明になります): screen の Add ステートメント、 Show expression ステートメント、または renpy.show()
関数に渡せられます。
Ren'Py スクリプトのステートメント link
ATL コードを含められる Ren'Py スクリプトステートメントが 3 つあります。
transform ステートメント link
transform
ステートメントは、新しい transform を作成します。構文は次のとおりです。 :
atl_transform ::= "transform"qualname
( "("parameters
")" )? ":"atl_block
transform ステートメントは 初期化時 に実行されます。 transform はパラメーターのリストを取られ、これはPython関数の定義とほぼ同じように機能しますが、いくつかの種類のパラメータが現在禁止されています。これらは将来的には許可される可能性があります。 :
位置専用パラメーター
デフォルト値のないキーワード専用パラメーター
可変長位置パラメーター (
*args
)可変長キーワードパラメーター (
**kwargs
)
作成されたオブジェクトは、そのすべてのパラメーターに値が与えられるまで、 transform として使用できません。
ATL curry and partial parameter passing も参照ください。
qualname はその transform の名前であり、ドット区切りの Python 識別子でなければなりません。 ATL ブロックによって作成された transform は、指定の store があればその中のこの名前に関連付けされます。
transform left_to_right:
xalign 0.
linear 2 xalign 1.
repeat
transform ariana.left:
xalign .3
transform animated_ariana_disp:
"ariana"
pause 1.
"ariana_reverse"
pause 1.
repeat
作成されたオブジェクトは transform であり、かつ displayable でもありますが、 image
ステートメントとは対照的に、変数 (または定数) として作成され、 画像 の名前空間には入りません。
image ステートメントの ATL ブロック link
スクリプトに ATL コードを含める 2 つ目の方法は、 image ステートメント の一部として含めることです。インラインの対応物として、画像名 (スペースが含まれる場合があります) を指定された transform に紐付けします。パラメーターを指定する方法がないため、 transform がアニメーションを定義する場合にのみ役立ちます。構文は次のとおりです。
atl_image ::= "image"image_name
":"atl_block
image animated_ariana_img:
"ariana"
pause 1.
"ariana_reverse"
pause 1.
repeat
scene ステートメントおよび show ステートメントの ATL ブロック link
ATL を使用する最後の方法は、 :ref:'show <show-statement>' または scene ステートメントの一部としての使用です。これにより、表示される画像がその場で作成されて画像に適用される ATL transform 内にラップされます。構文は次のとおりです。 :
atl_show ::=stmt_show
":"atl_block
atl_scene ::=stmt_scene
":"atl_block
show eileen happy:
xalign 1.
scene bg washington:
zoom 2.
ATL の構文とステートメント link
ATL ステートメントは記述している ATL ブロック内でインラインにすることもブロックを構成することもできます。関連するステートメントで説明されている一部の例外を除き、 ATL ブロック内のステートメントは上から下に順番に実行されます。
ATL ステートメントで式の評価が必要な場合、その評価は、その特定の ATL ステートメントが実行されるときではなく、その transform が最初に実行されるとき (つまり、 show
ステートメントを使用するとき、または画面の一部としてその transform を表示するとき) に行われます。
以下が ATL ステートメントです。
インライン Contains ステートメント link
インラインの contains ステートメントは、評価結果が displayable である式を1 つ取ります。
atl_contains ::= "contains" simple_expression
このステートメントは、現在の ATL transform の子をその式の値に設定 (または置換) して、アニメーションに役立てます。
transform an_animation:
"1.png"
pause 2
"2.png"
pause 2
repeat
image move_an_animation:
contains an_animation
# If we didn't use contains, we'd still be looping
# and would never reach here.
xalign 0.0
linear 1.0 yalign 1.0
Displayable ステートメント は transform 式ステートメントとそれほど明確な違いがなく曖昧さがありますが、その子の置き換えに transition を使用できます。このステートメントは、ATL transform が 2 番目の ATL transform の中身を埋め込むのではなく、内包する場合に特に便利です。
Number ステートメント link
number ステートメントは評価結果が整数または浮動小数である単純式で構成されたステートメントであり、任意でキーワード pause
が先行します。
atl_number ::= "pause"? simple_expression
実行をポーズする秒数の数値に使用されます。
image atl example:
# Displays logo_base.png
contains "logo_base.png"
# Pause for 1.0 seconds.
pause 1.0
# Show logo_bw.png, with a dissolve.
"logo_bw.png" with Dissolve(0.5, alpha=True)
# Pause for 3 seconds
3
repeat
プロパティーステートメント link
このステートメントは、 1 つ以上の transform プロパティーを新しい値に設定します。
atl_properties ::= atl_property
+
atl_property ::=transform_property
simple_expression
このステートメントには、最初に (少なくとも 1 つの) 一連のプロパティー名を指定し、それぞれの後に設定するための新しい値を続けます。 transform プロパティーとその意味、およびそれらが取れる値のリストについては、transform プロパティーの一覧 を参照してください。:
transform rightoid:
xalign .9
transform ariana.left:
xanchor .3 xpos 100
補間ステートメント link
補間ステートメントは、 transform をスムーズにアニメーションするための主要な方法です。
atl_interp ::= ((warper
simple_expression
) | ("warp"simple_expression
simple_expression
)) (atl_interp_target
+ | (":"atl_interp_target
+ ))
atl_interp_target ::= (atl_property
+ ("knot"simple_expression
)* ) |atl_transform_expression
| "clockwise" | "counterclockwise" | ("circles"simple_expression
)
補間例
show logo base:
# Show the logo at the upper right side of the screen.
xalign 1.0 yalign 0.0
# Take 1.0 seconds to move things back to the left.
linear 1.0 xalign 0.0
# Take 1.0 seconds to move things to the location specified in the
# truecenter transform. Use the ease warper to do this.
ease 1.0 truecenter
# Set the location to circle around.
anchor (0.5, 0.5)
# Use circular motion to bring us to spiral out to the top of
# the screen. Take 2 seconds to do so.
linear 2.0 yalign 0.0 clockwise circles 3
# Use a spline motion to move us around the screen.
linear 2.0 align (0.5, 1.0) knot (0.0, .33) knot (1.0, .66)
# Changes xalign and yalign at the same time.
linear 2.0 xalign 1.0 yalign 1.0
# The same thing, using a block.
linear 2.0:
xalign 1.0
yalign 1.0
補間の最初の部分を使用して補間をタイムワープする関数を選択します。つまり、線形時間を非線形時間にマッピングする関数であり、詳細については ワーパー を参照してください。ワーパーを選択するには、登録済みのワーパーの名前を指定するか、キーワード 「warp」の後にワープ関数を指定する式を続けます。
いずれの場合も、補間にかかる秒数の数字が続きます。
transform builtin_warper:
xpos 0
ease 5 xpos 520
init python:
def my_warper(t):
return t**4.4
define my_warpers = [my_warper]
transform accessed_as_function:
xpos 0
warp my_warpers[0] 5 xpos 520
warp my_warper 3 xpos 100
補間は、指定された時間または少なくとも 1 フレームの間持続します。
Transform プロパティー が指定されていると、それぞれに指定された値は、補間ステートメントの終了時に設定される値になります。これは、いくつかの方法で調整できます。
値に 1 つ以上の knot が続くと、スプラインモーションが使用されます。そのプロパティーの補間開始時の値から始まって指定した値で終わり、knot を使用してスプラインを制御します。1つの knot には2次曲線が使用され、 2つにはベジェ曲線、3つ以上の knot にはキャットムル-ロム スプラインが使用されます。前者 2 つでは、 knot はすべて(しばしば描画される経路外となる)制御 nodeです。キャットムル-ロム スプラインでは、最初と最後の knot が制御nodeで他の knot は通過点になります。
補間ステートメントに
clockwise
やcounterclockwise
があれば円形モーションで補間されます。Ren'Py は (pos
,align
,angle
,radius
などで設定される) 開始と終了の位置を比較し、極座標の中心 (around
) を算出します。そして開始角度から終了角度まで、指定された方向の回転で進む角度を計算します。circles 節を指定すると、Ren'Py は適切な数の円が作られることを保証します。それ以外の場合は、値は開始から終了まで線形補間されます。
また、 Transform 式 ステートメント も補間でき、この場合は 1 つのプロパティーステートメントのみを含む ATL transform である必要があります。その transform のプロパティーは、この補間に直接書き込まれたかのように処理されます。
ワーパーの後にはコロン (:) も続けられます。その場合、インデントされたブロック内に1 行以上の上記の節が続きます。これにより、多くの異なるものの補間を複数の行に分割できます。
pass ステートメント link
atl_pass ::= "pass"
pass
ステートメントは、何も起こさない単純なステートメントです。これは、2 つの choice ステートメント群 (下記参照) が連続して行われる場合など、ステートメントを分離したい場合に使用できます。また、構文ではブロックを作成する必要があるが、空にする必要がある場合 (たとえば、 choice ブロックの 1 つを何もしないようにする場合など) にも役立ちます。
Repeat ステートメント link
repeat
ステートメントは、単にそれを含むブロックの実行を再び最初から始めるステートメントです。
atl_repeat ::= "repeat" (simple_expression
)?
式があれば、その評価がブロックの実行回数を指定する整数になります(ですから、repeat 2
で終わるステートメントは最高で 2 回実行され、 repeat 1
はリピートしません)。
repeat ステートメントは、必ずブロックの最後になければなりません。
show logo base:
xalign 0.0
linear 1.0 xalign 1.0
linear 1.0 xalign 0.0
repeat
Block ステートメント link
block
ステートメントは、単に ATL ステートメントのブロックを含むステートメントです。
atl_block_stmt ::= "block" ":"
atl_block
これは繰り返すステートメントをグループ化するのに使えます。
show logo base:
alpha 0.0 xalign 0.0 yalign 0.0
linear 1.0 alpha 1.0
block:
linear 1.0 xalign 1.0
linear 1.0 xalign 0.0
repeat
Parallel ステートメント link
parallel
ステートメントは並行して実行される ATL ブロック群を定義出来ます。
atl_parallel ::= ("parallel" ":"
atl_block
)+
ブロック内の連続する1つ以上 parallel ステートメントは貪欲に平行群にグループ化されます。平行群の全てのブロックは同時に実行されます。parallel ステートメントは、最後のブロックが終了したときに終了します。
群中のブロックは、それぞれ独立したもので、かつ異なる Transform プロパティー を操作するものでなければなりません。2 つのブロックが同じプロパティーを変更するときの結果は未定義です。
show logo base:
parallel:
xalign 0.0
linear 1.3 xalign 1.0
linear 1.3 xalign 0.0
repeat
parallel:
yalign 0.0
linear 1.6 yalign 1.0
linear 1.6 yalign 0.0
repeat
choice ステートメント link
choice
ステートメントは、ランダムな選択肢群の 1 つを定義するステートメントです。 Ren'Py はその選択肢群から 1 つ選び、対応する ATL ブロックを実行します。その後、最後の選択肢群の後から実行を続けます。
atl_choice ::= ("choice" (simple_expression
)? ":"atl_block
)+
ブロック内の連続する choice ステートメントは積極的にグループ化されます。 simple_expression が与えられているなら、それはそのブロックに指定する浮動小数点のウェイトになり、なければ 1.0 になります。
image eileen random:
choice:
"eileen happy"
choice:
"eileen vhappy"
choice:
"eileen concerned"
pause 1.0
repeat
pass
ステートメントは、いくつかの choice ブロックの群をいくつかの choice ステートメントに分割したり、空の choice ブロックを作成したりする場合に便利です。
Animation ステートメント link
animation
ステートメントは ATL ブロックの最初のステートメントでなくてはならず、そのブロックのアニメーション時間軸使用を Ren'Py 通知します。
atl_animation ::= "animation"
通常の出現時間軸に対して、アニメーション時間軸は同じタグの画像やスクリーンが表示されたときに開始します。これは通常おなじ時間軸で別の物で置き換えられる画像があるときに使用します。例
image eileen happy moving:
animation
"eileen happy"
xalign 0.0
linear 5.0 xalign 1.0
repeat
image eileen vhappy moving:
animation
"eileen vhappy"
xalign 0.0
linear 5.0 xalign 1.0
repeat
label start:
show eileen happy moving
pause
show eileen vhappy moving
pause
この例では Eileen は最初の pause 終了時に表示を変えますが、その位置は両方のアニメーションで共有のアニメーション時間軸を持ち、同じ場所にスプライトを配置するため変わりません。アニメーションステートメントがないと、その位置はプレイヤークリック時にリセットされます。
On ステートメント link
on
ステートメントは、イベントハンドラを定義します。
atl_on ::= "on"name
(","name
)* ":"atl_block
on
ブロックは、貪欲に 1 つのステートメントにグループ化されます。on ステートメントは、1 つのイベント名、またはカンマ区切りのイベント名のリストを処理できます。
このステートメントは、イベントを処理するのに使います。あるイベントが処理されるとき、他のイベントの処理は終了し、新しいイベントの処理が即座に始まります。他のイベントが起こることなくイベントハンドラが終了したとき(すでに default イベントを処理していたのでなければ)、 default
イベントが引き起こされます。
on ステートメントの実行は自然には終わりません(しかし、time ステートメントや外側のイベントハンドラによって終了され得ます)。
任意のイベントを生成する方法については event ステートメントを、自然に生成されるイベントのリストについては 外部イベント を参照してください。:
show logo base:
on show:
alpha 0.0
linear .5 alpha 1.0
on hide:
linear .5 alpha 0.0
transform pulse_button:
on hover, idle:
linear .25 zoom 1.25
linear .25 zoom 1.0
Transform 式 ステートメント link
このステートメントは、現在の ATL ブロックの一部として別の ATL transform を含みます。
atl_transform_expression ::= simple_expression
これは、その ATL transform に子が提供されていない場合 (その方法についてはページの上部を参照) に適用され、それ以外の場合は Displayable ステートメント として解釈されます。指定された ATL transform の内容がこのステートメントの場所に含められます。:
transform move_right:
linear 1.0 xalign 1.0
image atl example:
# Display logo_base.png
"logo_base.png"
# Run the move_right transform.
move_right
Displayable ステートメント link
displayable ステートメントは、評価結果が displayable になる単純な Python 式から構成され、任意で 2 つ目の単純式を含む with 節が続きます。
atl_displayable ::=simple_expression
("with"simple_expression
)?
これを使用してステートメントの実行時に transform の子を設定または置換します。
with
節があれば、2つ目の式は transition として評価され、そのトランジションが以前の子と、新しい子の間に使用されます。この状況にすべてのトランジションが対応する訳ではないのに注意してください。特に 辞書トランジション や move-
, ease-
トランジションがそうです。
image atl example:
# Displays logo_base.png
"logo_base.png"
# Pause for 1.0 seconds.
1.0
# Show logo_bw.png, with a dissolve.
"logo_bw.png" with Dissolve(0.5, alpha=True)
警告
子を持たない transform を渡すことが、 transform を透明にして効果を失わせるので無意味な場合、子を持たない ATL transform を渡すことは Transform 式 ステートメント と解釈され、異なる結果をもたらします。
式が 子を持つ ATL transform と評価された場合、この ATL ブロックの実行は、内部の ATL コードが実行された後にのみ続行されます。
Contains ブロック ステートメント link
contains ブロックは、その インライン版 と同様に、 transform の子を設定しますが、方法は異なります。
atl_counts ::= "contains" ":"
atl_block
1つ以上のcontainsブロックは、単一の contains ステートメント内に貪欲にグループ化され、 Fixed()
内にラップされ、 transform の子として設定されます。
各ブロックは使用する displayable を定義する必要があり、そうしないとエラーが発生します。 contains ステートメントは、子の完了を待たずに即実行されます。
image test double:
contains:
"logo.png"
xalign 0.0
linear 1.0 xalign 1.0
repeat
contains:
"logo.png"
xalign 1.0
linear 1.0 xalign 0.0
repeat
Function ステートメント link
function
ステートメントは、ATL での Python コード使用を許可します。
atl_function ::= "function" simple_expression
この関数の定義は Transform()
で使われるのと同じです :
第一引数は transform オブジェクトです。 Transform プロパティー はこのオブジェクトの属性として設定できます。
第二引数は出現時間軸で、関数が実行され始めてからの秒数です。
第三引数はアニメーション時間軸で、同じタグのものがスクリーン上にある秒数です。
この関数の結果が数の場合、その秒数が経過するとまた呼び出されます(0 秒なら、関数はできるだけ早く呼び出されます)。 関数が None を返したら、制御は次の ATL ステートメントに渡されます。
この関数は第一引数の Transform オブジェクトの変更の他には副作用を持つべきではなく、予測のためにいつどの数値で呼び出されるか分かりません。
function
は transform プロパティーではないので、 Transform()
の function パラメータと完全に同じ動作ではないことに注意してください。
init python:
def slide_vibrate(trans, st, at, /):
if st > 1.0:
trans.xalign = 1.0
trans.yoffset = 0
return None
else:
trans.xalign = st
trans.yoffset = random.randrange(-10, 11)
return 0
label start:
show logo base:
function slide_vibrate
pause 1.0
repeat
time ステートメント link
time
ステートメントは制御ステートメントです。
atl_time ::= "time" simple_expression
これには 1 つの式が含まれ、評価結果はこのステートメントが含まれるブロックが実行され始めてからの時間を秒単位で表します。ステートメントで指定された時間に到達すると、次のステートメントが実行開始します。この制御の変異は以前のステートメントがまだ実行中であってもおこり、そのような以前のステートメントは直ちに停止します。
time ステートメントには暗黙に無限時間の pause ステートメントが前置されます。つまり、time ステートメントにたどり着いたときに制御が別のところにあれば、time ステートメントは制御を得るまで待ちます。
一つのブロックに複数の time ステートメントがある場合、それらは厳密に時間の経過順でなくてはなりません。
image backgrounds:
"bg band"
xoffset 0
block:
linear 1 xoffset 10
linear 1 xoffset 0
repeat # control would never exit this block
time 2.0
xoffset 0
"bg whitehouse"
time 4.0
"bg washington"
Event ステートメント link
event ステートメントは指定した名前のイベントを引き起こす simple ステートメントです。
atl_event ::= "event" name
あるブロック内でイベントが引き起こされたとき、指定した名前に対するイベントハンドラがそのブロックに存在しないかチェックされます。存在すれば、制御はイベントハンドラに移ります。存在しなければ、イベントは外側のイベントハンドラに伝播します。
外部イベント link
次のイベントは、ATL transform 内で自動的にトリガーされます。
start
on
ステートメントに進入したときに、これより高い優先度のイベントが起こらなかった場合に実行される擬似イベントです。show
transform が show ステートメントや scene ステートメントによって表示され、与えられたタグの画像がまだ存在しない場合に実行されます。
replace
transform が
show
ステートメントによって表示されて指定したタグの画像を置き換えると実行されます。hide
transform が
hide
ステートメントやそれと等価な Python を使って非表示されると実行されます。なお、これが実行されないときがあります。 transform が scene ステートメント を通して除去されたときや、ゲームメニューの終了などによって所属する コンテキスト が終了したときです。
replaced
transform が他のに置き換えられるときに引き起こされます。画像は、 ATL ブロックが完了するまで実際には非表示にはなりません。
update
スクリーンが、そのスクリーンの表示でも他のスクリーンの置き換えでもなく更新されると起こります。これはまれですが、ゲームロード時や、スタイルや翻訳変更時などに起こります。
hover
,idle
,selected_hover
,selected_idle
,insensitive
,selected_insensitive
この transform を含むボタンやこの transform に含まれるボタンが名前通りの状態になったときに引き起こされます。
ATL curry and partial parameter passing link
transform ステートメント を使用して定義された ATL transform は、異なるタイミングでパラメータを設定できます。ATL transform を関数のように呼び出すと、その結果の値は transform のままであり、値を渡されたパラメーターは、その値がパラメーターの新しいデフォルト値であるかのように扱われます。
例:
transform screamer(child, screamee, wait_time=2, flash_time=.1):
child
pause wait_time
screamee
pause flash_time
child
# doing this doesn't raise an error (it would if it were a Python function)
define shorter_screamer = screamer(wait_time=1)
define eileen_excited_screamer = screamer(screamee="eileen excited", flash_time=.2)
label start:
show hhannahh happy at screamer(screamee="hhannahh surprised", wait_time=1.5)
"Here is one way"
show eileen vhappy at eileen_excited_screamer
"Here is another"
show patricia sad at eileen_excited_screamer(screamee="patricia wow")
"And you can also do this"
shorter_screamer
transform は、 screamer
transform と同様に、 screamee
パラメーターが値を持たないため、 show eileen at screamer
のように直接使用できません。
また、ラベルやスクリーンと同様に、 transform ステートメント によって直接作成された transform のパラメーターのデフォルト値は、その transform が 定義された 時点ではなく、 呼び出された 時点で評価されることにも注意してください。
ただし、別の transform (上記の例の shorter_screamer
や patricia に適用された transform など) を呼び出した結果の transform では、元の transform のデフォルト値の評価から来たもの (shorter_screamer
の flash_time パラメーターや patricia の transform の wait_time パラメーターなど) か、その行の前の呼び出しで渡された値から来たもの (shorter_screamer
の wait_time パラメーターや Patricia の Transform の screamee パラメーターや flash_time パラメーターなど) かに関係なく、そのパラメーターのすべてのデフォルト値は評価済みになります。
特別な子パラメーター link
ATL transform に "child" という名前のパラメーターがあり、そのパラメーターが値を受け取る場合、パラメーターの種類や値を受け取る方法に関係なく (位置引数でもキーワード引数でも、位置指定専用またはキーワード専用でも、デフォルト値があってもなくても)、そのパラメーターの値は transform の子になるように平行して設定されます。
パラメーターのデフォルト値はカウントされず、パラメーターは外部から値を受け取る必要があることに注意してください。
逆に、その ATL transform が transform として使用される場合、 child=
キーワード引数が渡されるので、 (キーワードによって渡されるため、位置専用パラメーターは除いた) それを受け取るパラメータがある場合、 transform の実行時に子の設定に加えて子の値を持つことになります。
例えば、これにより、指定された子と別の displayable とを入れ替えられます
transform lucy_jump_scare(child):
# the child is implicitly set as the child of the transform
pause 5
# Jump scare
"lucy mad"
pause .2
# Go back to the original child
child
contains
ブロック 内にもとの child を配置するのにも使用出来ます。
transform marquee(width, height=1.0, duration=2.0, child=None):
xcenter 0.5
ycenter 0.5
crop (0, 0, 0.5, 500)
contains:
child
xanchor 0.0 xpos 1.0
linear duration xanchor 1.0 xpos 0.0
old_widget と new_widget の (位置専用にすべきではない) キーワードにも出来るパラメーター は、 ATL トランジション の一部として特別な用途があります。
ワーパー link
ワーパーは、補間ステートメントが経過したとみなす時間を変更する関数です。これらは t から t' への関数として定義されています。ここで t および t' は 0.0 から 1.0 の浮動小数点数です(ステートメントの持続時間が 0 なら、t は実行時に 1.0 になります)。 t' は0.0 から始まり、 1.0 で終るべきですが、それ以上でもそれ以下でも可能です。デフォルトで以下のワーパーが定義されています。
pause
一時停止し、新しい値に飛びます。
t == 1.0
ならt' = 1.0
, そうでなければt' = 0.0
です。linear
線形補間です。
t' = t
ease
最初は遅く、徐々に加速し、それから徐々減速します。
t' = .5 - math.cos(math.pi * t) / 2.0
easein
最初は速く、徐々に減速します。
t' = math.cos((1.0 - t) * math.pi / 2.0)
easeout
最初は遅く、徐々に加速します。
t' = 1.0 - math.cos(t * math.pi / 2.0)
さらに Robert Penner の easing 関数の殆どがサポートされます。上記と名前を合せるため、関数はリネームされました。これらの基本関数のグラフはこちらで閲覧出来ます。 http://www.easings.net/.
Ren'Py Name |
easings.net Name |
---|---|
ease_back |
easeInOut_back |
ease_bounce |
easeInOut_bounce |
ease_circ |
easeInOut_circ |
ease_cubic |
easeInOut_cubic |
ease_elastic |
easeInOut_elastic |
ease_expo |
easeInOut_expo |
ease_quad |
easeInOut_quad |
ease_quart |
easeInOut_quart |
ease_quint |
easeInOut_quint |
easein_back |
easeOut_back |
easein_bounce |
easeOut_bounce |
easein_circ |
easeOut_circ |
easein_cubic |
easeOut_cubic |
easein_elastic |
easeOut_elastic |
easein_expo |
easeOut_expo |
easein_quad |
easeOut_quad |
easein_quart |
easeOut_quart |
easein_quint |
easeOut_quint |
easeout_back |
easeIn_back |
easeout_bounce |
easeIn_bounce |
easeout_circ |
easeIn_circ |
easeout_cubic |
easeIn_cubic |
easeout_elastic |
easeIn_elastic |
easeout_expo |
easeIn_expo |
easeout_quad |
easeIn_quad |
easeout_quart |
easeIn_quart |
easeout_quint |
easeIn_quint |
これらのワーパーは上記のリストの関数を含む読み込み専用モジュールの _warper
からアクセス可能です。 Dissolve()
のようなタイムワープ関数を受け取るものに対して有用であり次のように使えます。
with Dissolve(1, time_warp=_warper.easein_quad)
python early ブロック内で renpy.atl_warper
デコレーターを使って新しいワーパーが定義できます。これはワーパーを使うファイルの前に読み込まれるファイル内に書きこまれていなければなりません。コードは次のようになります
python early hide:
@renpy.atl_warper
def linear(t):
return t
transofrm の置き換え link
ATL transform、組み込み transform または Transform
クラスを使用して定義された transform がこれらのカテゴリの別の transform に置き換えられると、置き換え元 transform のプロパティーは置き換え先 transform に継承されます。この継承は、他の種類の transform には適用されません。
show ステートメントの at
リストに複数の transform がある場合、 transform は最後から最初に、1 つのリストがなくなるまで対応します。例えば
show eileen happy at a, b, c
"Dialogue !"
show eileen happy at d, e
c
transform は e
で、 b
transform は d
で置き換えられ、 a
transform は置き換えられません。
置換ときに両方の transform が適切な種類である場合、古い transform のプロパティーの値が新しい transform にコピーされます。古い transform がアニメーションされていた場合は、現在の中間値が継承されます。例
transform bounce:
linear 3.0 xalign 1.0
linear 3.0 xalign 0.0
repeat
transform headright:
linear 15 xalign 1.0
label example:
show eileen happy at bounce
pause
show eileen happy at headright
pause
この例では、プレーヤーがクリックするまで、画像は左から右に跳ね返って戻ります。その場合、 bounce
transform の xalign
プロパティーを使用して headright
transform の xalign
プロパティーを初期化するので、画像はプレイヤーが最初にクリックしたときの位置から移動します。
位置プロパティー (xpos
, ypos
, xanchor
, yanchor
) と、それらを設定するためのプロパティ (例えば xalign
や radius
/ angle
) には、継承のための特別なルールがあります: 子に設定された値は親に設定された値を上書きします。これは、displayable が 1 つの位置しか持たず、意図的に設定された位置が優先されるためです。
最後に show
ステートメントが at
節を含まなければ同じ transform が使用されるので継承はありません。 Displayable を一旦非表示して再度表示すればすべての transform プロパティーをリセットします。 Displayable に適用されたアニメーションを(位置はそのままに)停止しするには次を使用します
show eileen happy at some_animation
"Wow, so this is what antigravity feels like !"
show eileen:
pass
"But I'm happy when it settles down."
Transform クラス link
最も単純な ATL transform に相当するものの 1 つは、Transform クラスです。
- class Transform(child=None, function=None, **properties) link
cropping や rotation, scaling, alpha-blending のような処理をその子に適用する transform を作成します。 transform オブジェクトはその子に適用する transform プロパティー に対応するフィールドを持ちます。
- child
transform が適用される子
- function(trans: Transform, st: float, at: float, /) int | None link
None または transform がレンダリングされるときに呼び出される関数を設定します。関数は3つの引数で呼び出されます。 :
transform オブジェクト
秒数での出現時間軸
秒数でのアニメーション時間軸
関数が秒数を返すなら、その秒数後再度呼び出され、 None なら次のインタラクション開始時に再度呼び出されます。
この関数は第一引数の Transform オブジェクトの変更の他には副作用を持つべきではなく、予測のためにいつどの数値で呼び出されるか分かりません。
追加のキーワード引数はその transform プロパティーに設定される値となります。その transform が描画されるたびにそれらの transform プロパティーは設定されるため、 Transform オブジェクトが作成された後はそれらのプロパティーは変更されることはないでしょう。しかし、他の transform プロパティーに対応するフィールドは、 function パラメーターとして渡された関数内や
update()
メソッドを呼び出す直前に設定して、変更できます。- hide_request link
この属性は関数が呼び出されると True に設定され、その transform が非表示されていることを示します。
- hide_response link
hide_request
が True なら、これを False に設定して transform が非表示されないようにできます。
- set_child(child) link
新しい child でこのメソッドを呼び出すと、この transform の子を変更します。
- update() link
function 引数として渡された関数以外から transform プロパティーフィールドが更新されるときには、これを呼び出して変更を確実に反映する必要があります。
Transform としての Callable link
最後に、単純な Python の callable を transform として使用できます。これらの callable は、引数として 1 つの Displayable を取り、新しい Displayable を返す必要があります。例
init python:
# this transform uses the right and left transforms
def right_or_left(d):
if switch:
return At(d, right)
else:
return At(d, left)
つまり、Flatten()
のような特定の組み込み関数も transform であり、そのように使用できます。