Animation and Transformation Language (ATL) では表示する displayable を選択してスクリーンに配置し、 回転やズーム、アルファ変更のような transform を適用する高度な手段を提供します。これらは時間の経過やイベントに対応して変化させられます。
Python で ATL transform に相当するのは Transform()
displayable です。ATL transform はプログラム的には作成できません。
ATL コードは 3 つの Ren'Py スクリプトステートメントの一部として使えます。
transform
ステートメントは、at 節に指定する ATL transform を作成します。transform ステートメントの構文は次の通りです。
atl_transform ::= "transform"name
"("parameters
")" ":"atl_block
transform ステートメントは、初期化時に実行されなければなりません。 init
ブロックの外にあると、自動的に優先度0の init
ブロック内に配置されます。transform にはパラメーターリストを指定出来、その場合は呼び出し時に提供されなければなりません。右側のパラメーターのデフォルトの値は "=" と値を追加して指定できます( 例 "transform a (b, c=0):") 。
Name は Python 識別子でなければなりません。ATL ブロックによって作成された transform はこの名前に関連付けされます。
transform left_to_right:
xalign 0.0
linear 2.0 xalign 1.0
repeat
ATL を使う第二の方法は、 image
ステートメントの ATL ブロックとして使うことです。これは画像名を指定した transform に関連付けします。この transform にパラメーターを与える方法はないので、この使い道はアニメーションの定義ぐらいです。image ステートメントに ATL ブロックを加える構文は次のとおりです。 :
atl_image ::= "image"image_name
":"atl_block
image eileen animated:
"eileen_happy.png"
pause 1.0
"eileen_vhappy.png"
pause 1.0
repeat
ATL を使う最後の方法は、 scene
ステートメントや show
ステートメントに含めることです。これは、表示される画像を ATL transform でラップします。
atl_scene ::=stmt_scene
":"atl_block
atl_show ::=stmt_show
":"atl_block
scene bg washington:
zoom 2.0
show eileen happy:
xalign 1.0
あるステートメントの ATL ブロックは、そのステートメントより深いインデント上に揃えた 1 行以上の論理行からなります。ATL ブロックの各論理行は、1 つ以上の ATL ステートメントを含まなければなりません。
ATL ステートメントには 2 種類あります。 simple ステートメントと complex ステートメントです。 simple ステートメントは ATL ブロックを受け取りません。1 行の論理行には、カンマで区切られた 1 つ以上の ATL ステートメントを含めます。 complex ステートメントにはブロックがあり、行にそれ以外を置くことはできません。 complex ステートメントの最初の行は必ずコロン :
で終わります。
デフォルトでは、ブロック中のステートメントは書いてある順に最初のステートメントから実行されます。実行は、ブロックの終端に達したときに終わります。time ステートメントはこれを該当の節で説明する通りに変更します。
ブロックの実行は、ブロックの全てのステートメントが終了したときに終わります。
ATL ステートメントが式の評価を要求するなら、その式は transform がシーンリストに最初に加えられるときに評価されます(例えば、show
ステートメントや ui
関数を使うとき)。
以下が ATL ステートメントです。
補間ステートメントは、ATL が transform を制御する主な方法です。
atl_properties ::= (property
simple_expression
( "knot"simple_expression
)* | "clockwise" | "counterclockwise" | "circles" simple_expression | simple_expression )*
atl_interp ::= (warper
simple_expression
| "warp"simple_expression
simple_expression
)?atl_properties
| (warper
simple_expression
| "warp"simple_expression
simple_expression
)? ":"atl_properties
補間ステートメントの最初の部分で補間をタイムワープする関数を選びます(これは、線形時間から非線形時間への変換関数です)。 それには ATL に登録されたワーパーの名前を指定するか、予約語「 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フレーム持続します。
このワーパーと補間にかける時間は、完了率を計算するのに使われます。補間にかかった時間を補間にかける時間で割った値をワーパーに渡し、ワーパーから返された結果が完了率となります。
補間ステートメントには続いて、いくつかの他の節を加えられます。プロパティーと値があるとき、その値はステートメントの終わりにそのプロパティーがとる値です。この値には数種類の経過で到達します。 :
値に1つ以上の knot が続くと、スプラインモーションが使用されます。そのプロパティーの補間開始時の値から始まって指定した値で終わり、knot を使用してスプラインを制御します。1つの knot には2次曲線が使用され、 2つにはベジェ曲線、3つ以上の knot にはキャットムル-ロム スプラインが使用されます。前者2つでは、 knot はすべて(しばしば描画される経路外となる)制御nodeです。キャットムル-ロム スプラインでは、最初と最後の knot が制御nodeで他の knot は通過点になります。
補間ステートメントに「 clockwise 」または「 counterclockwise 」が含まれると、後述する円運動が使われます。
そうでなければ、値は開始から終了まで完了率を使って線形補間されます。
単純式があれば、その評価はワーパーもスプラインも円運動も含まない一つの補間ステートメントを持つ transform でなければなりません。その transform から所得されたプロパティーは、このステートメントに含まれていたかのように処理されます。
ワーパーにはコロン(:)が続く場合もあります。その場合、上述の利用可能な節が1行以上続きます。これによりある ATL 補間を複数行のプロパティーに適用できます。
補間の例です
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
# Just pause for a second.
pause 1.0
# Set the location to circle around.
alignaround (.5, .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 thje 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
重要な特例は pause ワーパーで、続けて時間だけを書いてその時間 ATL の実行を休止します。
プロパティーには、複数の型の値を受け取られるものがあります。例えば xpos
プロパティーは整数、浮動小数点数、または absolute にできます。補間に異なる型の古いプロパティーと新しいプロパティーがあるときの動作は未定義です。
time
ステートメントは simple ステートメントです。このステートメントが含まれるブロックが実行され始めてからの時間を秒単位で表す simple_expression
を 1 つ含みます。
atl_time ::= "time" simple_expression
このステートメントで指定した時間が経過すると、後に続くステートメントの実行が始まります。この制御の移行は前のステートメントが実行中であってさえ行われ、先行するステートメントは即座に終了します。
time ステートメントには暗黙に無限時間の pause ステートメントが前置されます。つまり、time ステートメントにたどり着いたときに制御が別のところにあれば、time ステートメントは制御を得るまで待ちます。
一つのブロックに複数の time ステートメントがある場合、それらは厳密に時間の経過順でなくてはなりません。
image backgrounds:
"bg band"
time 2.0
"bg whitehouse"
time 4.0
"bg washington"
式 ステートメントは、単純式で始まる simple ステートメントです。with 節で 2 つめの単純式も続けられます。
atl_expression ::=simple_expression
("with"simple_expression
)?
最初の単純式は、以下の 3 つのいずれかに評価されるものにできます :
ATL transform であり、 (transform や トランジションとして呼び出されることで、または child や old_widget 引数で呼び出されることで) その ATL transform に child が渡されていなければ、その ATL transform はその式の位置に含まれます。 with
節は無視されます。
整数または浮動小数点数の場合、 pause が実行される秒数になります。 with
節は無視されます。
これら以外の場合、式は displayable と解釈されます。この displayable はこの節が実行されたときにその transform の子を置き換えるので、アニメーションに便利です。 with
節があると、第二の式はトランジションと評価され、そのトランジションが前後の displayable に適用されます。
transform move_right:
linear 1.0 xalign 1.0
image atl example:
# Display 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)
# Run the move_right transform.
move_right
atl_pass ::= "pass"
pass
ステートメントは、何も起こさない simple ステートメントです。これは、ステートメントを分割したいときに使えます。例えば、2 組の choice ステートメントが連続するのではなく分かれている方が望ましいときです。
repeat
ステートメントは、そのブロックの実行を再び最初から始める simple ステートメントです。式があれば、その評価がブロックの実行回数を指定する整数になります(ですから、repeat 2
で終わるステートメントは最高で 2 回実行されます)。
atl_repeat ::= "repeat" (simple_expression
)?
repeat ステートメントは、必ずブロックの最後になければなりません。
show logo base:
xalign 0.0
linear 1.0 xalign 1.0
linear 1.0 xalign 0.0
repeat
block ステートメントは、ATL ステートメントのブロックを含む complex ステートメントです。繰り返すステートメントをグループ化するのに使えます。
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
choice
ステートメントは、ランダムな選択肢群の 1 つを定義する complex ステートメントです。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
parallel
ステートメントを使用して並行して実行される ATL ブロック群を定義出来ます。
atl_parallel ::= "parallel" ":"
atl_block
ブロック内の連続する parallel ステートメントは 積極的にグループ化されます。全ての parallel ステートメントのブロックが同時進行は実行されます。parallel ステートメントは、最後のブロックが終了したときに終了します。
群中のブロックは、それぞれ独立したもので、かつ異なるプロパティーを操作するものでなければなりません。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
event ステートメントは指定した名前のイベントを引き起こす simple ステートメントです。
atl_event ::= "event" name
あるブロック内でイベントが引き起こされたとき、指定した名前に対するイベントハンドラがそのブロックに存在しないかチェックされます。存在すれば、制御はイベントハンドラに移ります。存在しなければ、イベントは外側のイベントハンドラに伝播します。
on ステートメントはイベントハンドラを定義する complex ステートメントです。on ステートメントは一つのステートメントに積極的にグループ化されます。 onステートメントでは、1つまたはコンマで区切られた複数のイベント名を扱えます。
atl_on ::= "on"name
[ ","name
] * ":"atl_block
on ステートメントは、イベントを処理するのに使います。イベントが処理されるとき、他のイベントの処理は終了し、新しいイベントの処理が即座に始まります。他のイベントが起こることなくイベントハンドラが終了したとき(すでに default イベントを処理していたのでなければ)、 default イベントが引き起こされます。
on ステートメントの実行は自然には終わりません(しかし、time ステートメントや外側のイベントハンドラによって終了され得ます)。
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
contains
ステートメントは、この ATL transform に含まれる displayable ( transform の子 transform ) を設定します。contains ステートメントには 2 種類あります。
contains 式は式を受け取り、その式を transform の子 transform として設定します。これは ATL transform に第2の ATL transform を含みたいが組み込みたくはないときに便利です。
atl_contains ::= "contains" expression
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
contains ブロックではこの ATL transform の子 transform として使われる ATL ブロックを定義できます。連続する contains ブロックステートメントは積極的にグループ化され、 Fixed()
でラップされ、この transform の子 transform として設定されます。全ての parallel ステートメントのブロックが同時進行で実行されます。
atl_counts ::= "contains" ":"
それぞれのブロックで使用する 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
ステートメントで、ATL に ATL プロパティーを制御する Python 関数を使わせられます。
atl_function ::= "function" expression
この関数の定義は Transform()
で使われるのと同じです :
第一引数は transform オブジェクトです。このオブジェクトに transform プロパティーを設定できます。
第二引数は出現時間軸で、関数が実行され始めてからの秒数です。
第三引数はアニメーション時間軸で、同じタグのものがスクリーン上にある秒数です。
この関数の結果が数の場合、その秒数が経過するとまた呼び出されます(0 秒なら、関数はできるだけ早く呼び出されます)。 関数が None を返したら、制御は次の ATL ステートメントに渡されます。
この関数は第一引数の Transform オブジェクトの変更の他には副作用を持つべきではなく、予測のためにいつどの数値で呼び出されるか分かりません。
init python:
def slide_function(trans, st, at):
if st > 1.0:
trans.xalign = 1.0
return None
else:
trans.xalign = st
return 0
label start:
show logo base:
function slide_function
pause 1.0
repeat
animation
ステートメントは ATL ブロックの最初のステートメントでなくてはならず、 Ren'Py にこのステートメントがアニメーション時間軸に従うことを通知します。timebase.
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 終了時に表示を変えますが、その位置は両方のアニメーションで共有のアニメーション時間軸を持ち、同じ場所にスプライトを配置するため変わりません。アニメーションステートメントがないと、その位置はプレイヤークリック時にリセットされます。
ワーパーは、補間ステートメントが経過したとみなす時間を変更する関数です。デフォルトで以下のワーパーが定義されています。これらは 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' = 0.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
からアクセス可能です。
python early ブロック内で renpy.atl_warper
デコレーターを使って新しいワーパーが定義できます。これはワーパーを使うファイルの前に読み込まれるファイル内に書きこまれていなければなりません。コードは次のようになります
python early hide:
@renpy.atl_warper
def linear(t):
return t
以下の transform プロパティーが存在します。
型(Type)に position が指定されていれば、整数、浮動小数点数、または absolute
にできます。 float ならそれが含まれる領域 (pos
) または displayable (anchor
)に対する割合として解釈されます。
なお、全てのプロパティーが独立しているわけではありません。例えば、 xalign
と xpos
はどちらも同じ元となるデータを更新します。parallel ステートメントでは、水平位置を調節していいブロックは 1 つだけ、垂直位置を調節していいブロックも 1 つだけです(同じブロックで両方調節しても良いです)。 angle および radius プロパティーは、水平位置と垂直位置の両方を設定します。
pos
linkType: | (position, position) |
---|---|
Default: | (0, 0) |
これを含む領域の左上隅に対する位置です。
xpos
linkType: | position |
---|---|
Default: | 0 |
これを含む領域の左端に対する水平位置です。
ypos
linkType: | position |
---|---|
Default: | 0 |
これを含む領域の上端に対する垂直位置です。
anchor
linkType: | (position, position) |
---|---|
Default: | (0, 0) |
displayable の左上隅に対するアンカー位置です。
xanchor
linkType: | position |
---|---|
Default: | 0 |
displayable の左端に対する水平アンカー位置です。
yanchor
linkType: | position |
---|---|
Default: | 0 |
displayable の上端に対する垂直アンカー位置です。
align
linkType: | (float, float) |
---|---|
Default: | (0.0, 0.0) |
pos と anchor を同じ値にするのに相当します。
xalign
linkType: | float |
---|---|
Default: | 0.0 |
xpos および xanchor をこの値に設定するのに相当します。
yalign
linkType: | float |
---|---|
Default: | 0.0 |
ypos および yanchor をこの値に設定するのに相当します。
offset
linkType: | (int, int) |
---|---|
Default: | (0, 0) |
displayable の縦横方向のオフセットのピクセル数です。正の数は下または右向きのオフセットになります。
xoffset
linkType: | int |
---|---|
Default: | 0 |
displayable の水平方向のオフセットのピクセル数です。正の数の右向きのオフセットです。
yoffset
linkType: | int |
---|---|
Default: | 0 |
displayable の縦方向のオフセットのピクセル数です。正の数は下向きのオフセットです。
xycenter
linkType: | (position, position) |
---|---|
Default: | (0.0, 0.0) |
xpos をこのプロパティーの値に、xanchor を 0.5 に設定するのに相当します。
xcenter
linkType: | position |
---|---|
Default: | 0.0 |
xpos をこのプロパティーの値に、xanchor を 0.5 に設定するのに相当します。
ycenter
linkType: | position |
---|---|
Default: | 0.0 |
ypos をこのプロパティーの値に、ranchor を 0.5 に設定するのに相当しますえ
rotate
linkType: | float または None |
---|---|
Default: | None |
None なら、回転は起こりません。そうでなければ、画像はこの角度だけ時計回りに回転します。displayable を回転すると、rotate_pad の設定に従ってリサイズされます。 xanchor および yanchor が 0.5 でなければ、これによって位置取りが変わることがあります。
rotate_pad
linkType: | boolean |
---|---|
Default: | True |
True の場合、回転された displayable の幅と高さが、元の幅と高さの斜辺と同じになるように埋め込まれます。これは transform が中身を回転させてもサイズが変わらないことを保証します。 False の場合、 transform は transform された displayable を含む最小限のサイズになります。これは固定回転に向いています。
transform_anchor
linkType: | boolean |
---|---|
Default: | False |
True なら anchor の位置は切り取られた子に配置され、子の transform とともに拡大や回転します。つまりこれは anchor をそれを中心に子が回転したり、サイズが変更したりする点にします。
zoom
linkType: | float |
---|---|
Default: | 1.0 |
displayable を指定した係数倍ズームします。
xzoom
linkType: | float |
---|---|
Default: | 1.0 |
displayable を指定した係数倍水平にズームします。負の値は画像を水平に反転します。
yzoom
linkType: | float |
---|---|
Default: | 1.0 |
displayable を指定した係数倍垂直にズームします。負の値は画像を垂直に反転します。
nearest
linkType: | boolean |
---|---|
Default: | None |
True なら displayable とその子は最近傍補間を使用して描画されます。 False なら displayable とその子は双一次補間で描画されます。None なら親の設定から引き継がれるか、 config.nearest_neighbor
が使用されます。これはデフォルトでは False です。
alpha
linkType: | float |
---|---|
Default: | 1.0 |
displayable の不透明度を制御します。
alpha transform は transform の子で構成される各画像に独立して適用されます。これはキャラクターとの距離を考慮してキャラクターを見るときのように、子が重なり合っていると望まぬ結果になるかもしれません。 Flatten()
displayable はこれらの問題の手助けになるでしょう。
additive
linkType: | float |
---|---|
Default: | 0.0 |
Ren'Py が加算合成をどう処理するかを制御します。 1.0 なら Ren'Py は ADD 処理を使用し、 0.0 なら OVER 処理を使用して描画します。
Additive blending は transform のそれぞれの子に独立して処理されます。
完全な加算合成は対象のアルファチャンネルを置き換えず、加算合成された画像は不透明な部分に直接描画されていなければ見えないでしょう ( viewport, Flatten()
, Frame()
や一部のトランジションのような複雑な処理は加算合成で問題を起こすかもしれません )。
警告
加算合成はOpenGL や DirectX/ANGLE レンダリングエンジンのようにハードウェアベースのレンダリングエンジンでのみサポートされます。ソフトウェアレンダリングエンジンは加算合成された画像を正確に描画出来ないでしょう。
一旦描画システムが開始すると、 renpy.get_renderer_info()["additive"]
は加算合成がサポートされていれば True になります。
around
linkType: | (position, position) |
---|---|
Default: | (0.0, 0.0) |
None を指定するか、これを含む領域の左上に対する極座標の中心を指定します。これで中心を設定すると、position モードで円運動ができます。
alignaround
linkType: | (float, float) |
---|---|
Default: | (0.0, 0.0) |
None を指定するか、これを含む領域の左上に対する極座標の中心を指定します。これで中心を設定すると、align モードで円運動ができます。
angle
linkType: | float |
---|
極座標における位置の角度成分を受け取ります。これは、極座標の中心が設定されていないときには未定義です。
radius
linkType: | position |
---|
極座標における位置の半径成分を受け取ります。これは、極座標の中心が設定されていないときには未定義です。
crop
linkType: | None or (position, position, position, position) |
---|---|
Default: | None |
None でない場合、displayable は指定の大きさに切り取られます。切り取りサイズは (x, y, width, height) のタプルで指定されます。
cornerとcropが指定されると、cropがcornerより優先されます。
corner1
linkType: | None or (position, position) |
---|---|
Default: | None |
None を指定するか、crop ボックスの左上隅を指定します。 corner より crop が優先されます。浮動小数が指定され、 crop_relative が有効ならそれはその子のサイズに対する相対値になります。
corner2
linkType: | None or (position, position) |
---|---|
Default: | None |
None を指定するか、crop ボックスの右下隅を指定します。 corner より crop が優先されます。浮動小数が指定され、 crop_relative が有効ならそれはその子のサイズに対する相対値になります。
xysize
linkType: | None or (position, position) |
---|---|
Default: | None |
None でなければ Displayable を指定のサイズにスケールします。これは xsize
と ysize
プロパティーをそれぞれ1つ目と2つ目の要素に設定するのと同じです。
これは fit
プロパティーに影響されます。.
xsize
linkType: | None または position |
---|---|
Default: | None |
None または、displayable の幅が合わせられる値を指定します。
これは fit
プロパティーに影響されます。.
ysize
linkType: | None または position |
---|---|
Default: | None |
None または、displayable の高さが合わせられる値を指定します。
これは fit
プロパティーに影響されます。.
fit
linkType: | None または文字列 |
---|---|
Default: | None |
以下の表に応じて Displayable のサイズを合わせます。ここでの「方向」は次の通りです。 :
それらのプロパティーの一方のみが None でなければその方向のみが使用されます。
そうではなく、 fit が None でなければ、その transform が含まれている領域が方向として使用されます。
fit と xsize, ysize がすべて None なら、このプロパティーは適用されません。
Value | Description |
---|---|
contain |
アスペクト比を維持して各方向の指定を超えない範囲で大きくする |
cover |
アスペクト比を維持してすべての方向の指定に合う、または超えるように小さくする |
None または |
displayable を正確に方向指定に合うように引き延ばす |
scale-down |
|
scale-up |
|
subpixel
linkType: | boolean |
---|---|
Default: | False |
True の場合、サブピクセル(訳注: 1ピクセル以下での描画)による位置決めを使用して子は配置されます。
Subpixel によるポジションニングは複数のピクセルに渡って描画され、特定の1つのピクセルには描画されない(透明度を含む)色に影響を与えます。subpixel ポジションは (通常) 移動と組み合わせて使用され、その画像はその端が画面の可視領域にあれば移動方向に透明な境界をもつようになります。
例えばあるキャラクターの立ち絵が水平に移動しているなら、左右に透明な境界線を持つことになります。背景に対するパンニングでは可視領域を拡張して端が見えないのでこれらは起こりません。
delay
linkType: | float |
---|---|
Default: | 0.0 |
この transform がトランジションとして使われるなら、これはトランジションの持続時間になります。
events
linkType: | boolean |
---|---|
Default: | True |
True の場合、この transform の子にイベントが渡されます。False の場合、イベントはブロックされます(これはATL transform で使用され、イベントが old_widget に達することを防ぎます)。
xpan
linkType: | None or float |
---|---|
Default: | None |
None か、360度のパノラマ画像を水平に振る角度と解釈されます。画像の中心は0度として扱われ、左右はそれぞれ-180から180度になります。
ypan
linkType: | None or float |
---|---|
Default: | None |
None か、360度のパノラマ画像を縦に振る角度と解釈されます。画像の中心は0度として扱われ、上下はそれぞれ-180から180度になります。
xtile
linkType: | int |
---|---|
Default: | 1 |
水平に敷き詰める画像の個数です。
ytile
linkType: | int |
---|---|
Default: | 1 |
縦に敷き詰める画像の個数です。
matrixcolor
linkType: | None, Matrix または MatrixColor |
---|---|
Default: | None |
None またはこの transform の子が描画するすべての色を置き換えるプロパティーの値です。補間は MatrixColor が使用されたときのみサポートされます。 MatrixColor は構造的に同じです。詳細は matricolor を参照してください。
これにはモデルベースのレンダリングを config.gl2
を True に設定して有効化する必要があります。
blur
linkType: | None or float |
---|---|
Default: | None |
displayable の境界まで blur ピクセル分この transform の子をブラーします。ブラー方法の正確な詳細は Ren'Py のバージョンで変更するかもしれません。また、特に画像のブラーが変化していくときはブラーが人工的に感じられるかもしれません。
これにはモデルベースのレンダリングを config.gl2
を True に設定して有効化する必要があります。
ドキュメントの他の部分で記述される一連の transform プロパティーもあります。 :
perspective
, matrixanchor
, matrixtransform
, zpos
, zzoom
blend
, mesh
, mesh_pad
, shader
u_
で始まるプロパティーは custom shaders に使用される uniform です。
これらのプロパティーは、以下の順に適用されます :
位置プロパティー
警告
より最近の機能と衝突する可能性があるため現在のゲームでは次のプロパティーは使用するべきでありません。これらは互換性を保つためだけに同じ動作を実現する新しい方法とともに残されています。
補間ステートメントが予約語 clockwise
や counterclockwise
を含むとき、円形モーションが補間されます。Ren'Py は開始と終了の位置を比較し、極座標の中心を計算します。そして Ren'Py は開始角度から終了角度まで、指定された方向の回転で進む角度を計算します。円運動の節が与えられたら、Ren'Py は適切な数の円が作られることを保証します。
Ren'Py は angle および radius プロパティーを適切に補間し、円形運動を起こします。 transform が align モードの場合、angle および radius を設定すると align プロパティーが設定されます。そうでなければ、pos プロパティーが設定されます。
以下のイベントは自動的に実行されます :
start
on
ステートメントに進入したときに、これより高い優先度のイベントが起こらなかった場合に実行される擬似イベントです。
show
transform が show ステートメントや scene ステートメントによって表示され、与えられたタグの画像がまだ存在しない場合に実行されます。
replace
transform が show
ステートメントによって表示されて指定したタグの画像を置き換えると実行されます。
hide
transform が hide
ステートメントやそれと等価な Python を使って非表示されると実行されます。
なお、これが実行されないときがあります。 transform が scene ステートメントを通して除去されたときや、ゲームメニューの終了などによって transform が存在するコンテキストから抜けることで除去されたときです。
replaced
transform が別のもので置き換えられたときに引き起こされます。画像は、ATL ブロックが完了するまで実際には非表示にはなりません。
update
スクリーンが表示されずに、または他のスクリーンを置き換えずに更新されると起ります。これはゲームロード時や、スタイルや翻訳変更時などにまれに起ります。
hover
, idle
, selected_hover
, selected_idle
この transform を含むボタンやこの transform に含まれるボタンが名前通りの状態になったときに引き起こされます。
Transform()
クラスを使用して定義された ATL transform や transform が他のクラスで置き換えられるとその transform のプロパティーは置き換えた transform に引き継がれます。
show
ステートメントの at リスト内に複数の transform があるとき、それらの transform は最後から最初の順にリストがなくなるまでマッチします。例えば
show eileen happy at a, b, c
"Let's wait a bit."
show eileen happy at d, e
c
transform は e
で、 b
transform は d
で置き換えられ、 a
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
の xalign
でheadright の xalighn
が初期化され、スプライトはプレイヤーが最初にクリックしたときにあった位置から動き始めます。
位置プロパティー (xpos
, ypos
, xanchor
, yanchor
) の継承には特別なルールがあり、子で設定された値は親で設定された値を上書きします。これは Displayable の位置は1つのみで、アクティブに設定された位置が優先されるからです。これらのプロパティーは複数の方法で設定されます。例えば xalign
は xpos と xanchor を設定します。
最終的に show
ステートメントが at
節を含まなければ同じ Displayable が使用されるので継承は不要です。表示した Displayable いったん非表示すれば継承はされなくなります。
ATL transform を使用してトランジションを定義できます。それらのトランジションは old_widget と new_widget 引数を受け取ります。それらはそれぞれトランジション前と後の displayable に渡されます。
ATL トランジションは delay
プロパティーをそのトランジションが続く秒数の数値に設定しなければいけません。 events
プロパティーを使用して old Displayable がイベントを受け取らないようにもできます。
transform spin(duration=1.0, new_widget=None, old_widget=None):
# Set how long this transform will take to complete.
delay duration
# Center it.
xcenter 0.5
ycenter 0.5
# Spin the old displayable.
old_widget
events False
rotate 0.0
easeout (duration / 2) rotate 360.0
# Spin the new displayable.
new_widget
events True
easein (duration / 2) rotate 720.0
パラメーターリストにそのパラメーターがあれば、特定のコンテキストで Ren'Py が ATL に提供するいくつかのパラメーターがあります。
ATL が transform として使用されるとき、 child パラメーターにはその transform が適用された元の child が渡されます。これによりそのchild が明示的に参照されます。例えば提供された child と 他の Displayable を交換できます。
transform lucy_jump_scare(child):
child # Show the original child.
pause 5
"lucy mad" # Jump scare.
pause .2
child # Go back to the original child.
contains
ブロック 内にもとの child を配置しても使用出来ます。
transform marquee(width, height=1.0, duration=2.0, child=None):
xcenter 0.5
ycenter 0.5
crop_relative True
crop (0, 0, 0.5, 500)
contains:
child
xanchor 0.0 xpos 1.0
linear duration xanchor 1.0 xpos 0.0
ATL ブロックがトランジションとして使用されるとき、これらはトランジション前と後の Displayable にそれぞれ与えられます。