Animation and Transformation Language (ATL) link

Animation and Transformation Language (ATL) では表示する displayable を選択してスクリーンに配置し、 回転やズーム、アルファ変更のような transform を適用する高度な手段を提供します。これらは時間の経過やイベントに対応して変化させられます。

Python で ATL transform に相当するのは Transform() displayable です。ATL transform はプログラム的には作成できません。

Ren'Py スクリプトのステートメント link

ATL コードは 3 つの Ren'Py スクリプトステートメントの一部として使えます。

transform ステートメント link

transform ステートメントは、at 節に指定する ATL transform を作成します。transform ステートメントの構文は次の通りです。

atl_transform ::=  "transform" qualname ( "(" parameters ")" )? ":"
                      atl_block

transform ステートメントは、初期化時に実行されなければなりません。 init ブロックの外にあると、自動的に優先度0の init ブロック内に配置されます。transform にはパラメーターリストを指定出来、その場合は呼び出し時に提供されなければなりません。右側のパラメーターのデフォルトの値は "=" と値を追加して指定できます( 例 "transform a (b, c=0):") 。

qualname はドット区切りの Python 識別子でなければなりません。ATL ブロックによって作成された transform はこの名前に関連付けされます。指定すれば指定した store 内で関連付けられます。

transform left_to_right:
    xalign 0.0
    linear 2.0 xalign 1.0
    repeat

transform ariana.left:
    xcenter .3

image ステートメントの ATL ブロック link

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

scene ステートメントおよび show ステートメントの ATL ブロック link

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 構文および語義 link

あるステートメントの ATL ブロックは、そのステートメントより深いインデント上に揃えた 1 行以上の論理行からなります。ATL ブロックの各論理行は、1 つ以上の ATL ステートメントを含まなければなりません。

ATL ステートメントには 2 種類あります。 simple ステートメントと complex ステートメントです。 simple ステートメントは ATL ブロックを受け取りません。1 行の論理行には、カンマで区切られた 1 つ以上の ATL ステートメントを含めます。 complex ステートメントにはブロックがあり、行にそれ以外を置くことはできません。 complex ステートメントの最初の行は必ずコロン : で終わります。

デフォルトでは、ブロック中のステートメントは書いてある順に最初のステートメントから実行されます。実行は、ブロックの終端に達したときに終わります。time ステートメントはこれを該当の節で説明する通りに変更します。

ブロックの実行は、ブロックの全てのステートメントが終了したときに終わります。

ATL ステートメントが式の評価を要求するなら、その式は transform が最初に実行されたときに評価されます(例えば、show ステートメントやその transform をスクリーンの一部として表示したとき)。

ATL ステートメント link

以下が ATL ステートメントです。

補間ステートメント link

補間ステートメントは、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.
    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

重要な特例は pause ワーパーで、続けて時間だけを書いてその時間 ATL の実行を休止します。

time ステートメント link

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"

式 ステートメント link

式 ステートメントは、単純式で始まる simple ステートメントです。with 節で 2 つめの単純式も続けられます。

atl_expression ::=   simple_expression ("with" simple_expression)?

最初の単純式は、以下の 3 つのいずれかに評価されるものにできます :

  • ATL transform であり、 (transform や トランジションとして呼び出されるこ、または child 引数で呼び出されることで) その 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

pass ステートメント link

atl_pass ::=  "pass"

pass ステートメントは、何も起こさない simple ステートメントです。これは、ステートメントを分割したいときに使えます。例えば、2 組の choice ステートメントが連続するのではなく分かれている方が望ましいときです。

Repeat ステートメント link

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 ステートメント link

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 ステートメント link

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 ステートメント link

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 ステートメント link

event ステートメントは指定した名前のイベントを引き起こす simple ステートメントです。

atl_event ::=  "event" name

あるブロック内でイベントが引き起こされたとき、指定した名前に対するイベントハンドラがそのブロックに存在しないかチェックされます。存在すれば、制御はイベントハンドラに移ります。存在しなければ、イベントは外側のイベントハンドラに伝播します。

On ステートメント link

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 ステートメント link

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 ステートメント link

function ステートメントで、ATL に ATL プロパティーを制御する Python 関数を使わせられます。

atl_function ::=  "function" expression

この関数の定義は Transform() で使われるのと同じです :

  • 第一引数は transform オブジェクトです。このオブジェクトに transform プロパティーを設定できます。

  • 第二引数は出現時間軸で、関数が実行され始めてからの秒数です。

  • 第三引数はアニメーション時間軸で、同じタグのものがスクリーン上にある秒数です。

  • この関数の結果が数の場合、その秒数が経過するとまた呼び出されます(0 秒なら、関数はできるだけ早く呼び出されます)。 関数が None を返したら、制御は次の ATL ステートメントに渡されます。

この関数は第一引数の Transform オブジェクトの変更の他には副作用を持つべきではなく、予測のためにいつどの数値で呼び出されるか分かりません。

function は transform プロパティーではないので、 Transform()function パラメータと完全に同じ意味ではないことに注意してください。

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 ステートメント link

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 終了時に表示を変えますが、その位置は両方のアニメーションで共有のアニメーション時間軸を持ち、同じ場所にスプライトを配置するため変わりません。アニメーションステートメントがないと、その位置はプレイヤークリック時にリセットされます。

ワーパー 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

transform プロパティーの一覧 link

以下の transform プロパティーが存在します。

position として型(Type)を指定する場合、 相対要素はそれを含む領域 (pos) または displayable (anchor) に対する割合として解釈されます。

なお、全てのプロパティーが独立しているわけではありません。例えば、 xalignxpos はどちらも同じ元となるデータを更新します。parallel ステートメントでは、1つ以上のブロックが同じデータを共有するプロパティーを変更するべきではありません。 angle および radius プロパティーは、水平位置と垂直位置の両方を設定します。

配置 link

pos link
Type:

(position, position)

Default:

(0, 0)

これを含む領域の左上隅に対する位置です。

xpos link
Type:

position

Default:

0

これを含む領域の左端に対する水平位置です。

ypos link
Type:

position

Default:

0

これを含む領域の上端に対する垂直位置です。

anchor link
Type:

(position, position)

Default:

(0, 0)

displayable の左上隅に対するアンカー位置です。

xanchor link
Type:

position

Default:

0

displayable の左端に対する水平アンカー位置です。

yanchor link
Type:

position

Default:

0

displayable の上端に対する垂直アンカー位置です。

align link
Type:

(float, float)

Default:

(0.0, 0.0)

pos と anchor を同じ値にするのに相当します。

xalign link
Type:

float

Default:

0.0

xpos および xanchor をこの値に設定するのに相当します。

yalign link
Type:

float

Default:

0.0

ypos および yanchor をこの値に設定するのに相当します。

offset link
Type:

(absolute, absolute)

Default:

(0, 0)

displayable の縦横方向のオフセットのピクセル数です。正の数は下または右向きのオフセットになります。

xoffset link
Type:

absolute

Default:

0

displayable の水平方向のオフセットのピクセル数です。正の数の右向きのオフセットです。

yoffset link
Type:

absolute

Default:

0

displayable の縦方向のオフセットのピクセル数です。正の数は下向きのオフセットです。

xycenter link
Type:

(position, position)

Default:

(0.0, 0.0)

xpos をこのプロパティーの値に、xanchor を 0.5 に設定するのに相当します。

xcenter link
Type:

position

Default:

0.0

xpos をこのプロパティーの値に、xanchor を 0.5 に設定するのに相当します。

ycenter link
Type:

position

Default:

0.0

ypos をこのプロパティーの値に、ranchor を 0.5 に設定するのに相当しますえ

subpixel link
Type:

boolean

Default:

False

True の場合、サブピクセル(訳注: 1ピクセル以下での描画)による位置決めを使用して子は配置されます。

Subpixel によるポジションニングは複数のピクセルに渡って描画され、特定の1つのピクセルには描画されない(透明度を含む)色に影響を与えます。subpixel ポジションは (通常) 移動と組み合わせて使用され、その画像はその端が画面の可視領域にあれば移動方向に透明な境界をもつようになります。

例えばあるキャラクターの立ち絵が水平に移動しているなら、左右に透明な境界線を持つことになります。背景に対するパンニングでは可視領域を拡張して端が見えないのでこれらは起こりません。

回転 link

rotate link
Type:

float または None

Default:

None

None なら、回転は起こりません。そうでなければ、画像はこの角度だけ時計回りに回転します。displayable を回転すると、rotate_pad の設定に従ってリサイズされます。 xanchor および yanchor が 0.5 でなければ、これによって位置取りが変わることがあります。

rotate_pad link
Type:

boolean

Default:

True

True の場合、回転された displayable の幅と高さが、元の幅と高さの斜辺と同じになるように埋め込まれます。これは transform が中身を回転させてもサイズが変わらないことを保証します。 False の場合、 transform は transform された displayable を含む最小限のサイズになります。これは固定回転に向いています。

transform_anchor link
Type:

boolean

Default:

False

True なら anchor の位置は切り取られた子に配置され、子の transform とともに拡大や回転します。つまりこれは anchor をそれを中心に子が回転したり、サイズが変更したりする点にします。

ズームと反転 link

zoom link
Type:

float

Default:

1.0

displayable を指定した係数倍ズームします。

xzoom link
Type:

float

Default:

1.0

displayable を指定した係数倍水平にズームします。負の値は画像を水平に反転します。

yzoom link
Type:

float

Default:

1.0

displayable を指定した係数倍垂直にズームします。負の値は画像を垂直に反転します。

ピクセルエフェクト link

nearest link
Type:

boolean

Default:

None

True なら displayable とその子は最近傍補間を使用して描画されます。 False なら displayable とその子は双一次補間で描画されます。None なら親の設定から引き継がれるか、 config.nearest_neighbor が使用されます。これはデフォルトでは False です。

alpha link
Type:

float

Default:

1.0

displayable の不透明度を制御します。

alpha transform は transform の子で構成される各画像に独立して適用されます。これはキャラクターとの距離を考慮してキャラクターを見るときのように、子が重なり合っていると望まぬ結果になるかもしれません。 Flatten() displayable はこれらの問題の手助けになるでしょう。

additive link
Type:

float

Default:

0.0

Ren'Py が加算合成をどう処理するかを制御します。 1.0 なら Ren'Py は ADD 処理を使用し、 0.0 なら OVER 処理を使用して描画します。

Additive blending は transform のそれぞれの子に独立して処理されます。

完全な加算合成は対象のアルファチャンネルを置き換えず、加算合成された画像は不透明な部分に直接描画されていなければ見えないでしょう ( viewport, Flatten(), Frame() や一部のトランジションのような複雑な処理は加算合成で問題を起こすかもしれません )。

matrixcolor link
Type:

None, Matrix または MatrixColor

Default:

None

None またはこの transform の子が描画するすべての色を置き換えるプロパティーの値です。補間は MatrixColor が使用されたときのみサポートされます。 MatrixColor は構造的に同じです。詳細は matricolor を参照してください。

blur link
Type:

None or float

Default:

None

displayable の境界まで blur ピクセル分この transform の子をブラーします。ブラー方法の正確な詳細は Ren'Py のバージョンで変更するかもしれません。また、特に画像のブラーが変化していくときはブラーが人工的に感じられるかもしれません。

極座標配置 link

around link
Type:

(position, position)

Default:

(0.0, 0.0)

これを含む領域の左上端に対する (tpref:angleradius から算出される) 極座標の開始位置を指定します。この2つの合計が最終的な pos になります。

angle link
Type:

float

極座標で指定する位置の角度成分を指定します。これは 0 がスクリーンの上、90 が右になる度数で測定されます。

Ren'Py はこの角度を0度以上360度未満の間に固定します。この範囲外の値が設定された場合、この範囲内の同等の角度に設定されてから使用されます。(これを-10に設定することは、350に設定することと同じです)。

radius link
Type:

position

極座標で指定される位置の半径成分です。

浮動小数ならば、その transform に対して利用可能な幅と高さの小さい方にスケーリングされます。

極座標配置でのアンカー link

注釈

極座標を使用してアンカーの配置もできますが、単に anchor を (0.5, 0.5) に設定して、displayable の中心に配置する方が便利な場合が多いです。

anchoraround link
Type:

(position, position)

これは、 displayable の左上隅を基準にした始点を指定し、そこから ( anchorangleanchorradius から計算される) 極ベクトルが描画されます。この 2 つの合計により、最終的な anchor が得られます。

anchorangle link
Type:

(float)

極座標におけるアンカー位置の角度成分を指定します。これは 0 が上、90 が右になる度数で指定されます。

Ren'Py はこの角度を0度以上360度未満の間に固定します。この範囲外の値が設定された場合、この範囲内の同等の角度に設定されてから使用されます。(これを-10に設定することは、350に設定することと同じです)。

anchorradius link
Type:

(position)

極座標で指定されるアンカー位置の半径成分です。

float の場合、displayable のサイズと形状に合わせて水平方向と垂直方向に拡大縮小されます: 高さが幅と等しくない場合、半径は厳密には絶対座標というわけではないので、 anchorangle を変化させたときに楕円運動になります。そのため、このプロパティには int または absolute() の値のみを渡すことをお勧めします。

トリミングとサイズ変更 link

crop link
Type:

None or (position, position, position, position)

Default:

None

None でない場合、displayable は指定の大きさに切り取られます。切り取りサイズは (x, y, width, height) のタプルで指定されます。

cornerとcropが指定されると、cropがcornerより優先されます。

corner1 link
Type:

None or (position, position)

Default:

None

None を指定するか、crop ボックスの左上隅を指定します。 corner より crop が優先されます。浮動小数が指定され、 crop_relative が有効ならそれはその子のサイズに対する相対値になります。

corner2 link
Type:

None or (position, position)

Default:

None

None を指定するか、crop ボックスの右下隅を指定します。 corner より crop が優先されます。浮動小数が指定され、 crop_relative が有効ならそれはその子のサイズに対する相対値になります。

xysize link
Type:

None or (position, position)

Default:

None

None でなければ Displayable を指定のサイズにスケールします。これは xsizeysize プロパティーをそれぞれ1つ目と2つ目の要素に設定するのと同じです。

これは fit プロパティーに影響されます。.

xsize link
Type:

None または position

Default:

None

None または、displayable の幅が合わせられる値を指定します。

これは fit プロパティーに影響されます。.

ysize link
Type:

None または position

Default:

None

None または、displayable の高さが合わせられる値を指定します。

これは fit プロパティーに影響されます。.

fit link
Type:

None または文字列

Default:

None

以下の表に応じて Displayable のサイズを合わせます。ここでの「方向」は次の通りです。 :

  • xsizeysize の両方が None でなければ、両方のサイズが方向として扱われます。

  • それらのプロパティーの一方のみが None でなければその方向のみが使用されます。

  • そうではなく、 fit が None でなければ、その transform が含まれている領域が方向として使用されます。

fit と xsize, ysize がすべて None なら、このプロパティーは適用されません。

Value

Description

contain

アスペクト比を維持して各方向の指定を超えない範囲で大きくする

cover

アスペクト比を維持してすべての方向の指定に合う、または超えるように小さくする

None または fill

displayable を正確に方向指定に合うように引き延ばす

scale-down

contain 同様ですが、 displayable のサイズを増加させない

scale-up

cover 同様だが、 displayable のサイズを小さくしない

パンとタイリング link

xpan link
Type:

None or float

Default:

None

None か、360度のパノラマ画像を水平に振る角度と解釈されます。画像の中心は0度として扱われ、左右はそれぞれ-180から180度になります。

ypan link
Type:

None or float

Default:

None

None か、360度のパノラマ画像を縦に振る角度と解釈されます。画像の中心は0度として扱われ、上下はそれぞれ-180から180度になります。

xtile link
Type:

int

Default:

1

水平に敷き詰める画像の個数です。

ytile link
Type:

int

Default:

1

縦に敷き詰める画像の個数です。

トランジション link

ATL トランジション を参照してください。

delay link
Type:

float

Default:

0.0

この transform がトランジションとして使われるなら、これはトランジションの持続時間になります。 ATL トランジション を参照してください。

events link
Type:

boolean

Default:

True

True の場合、この transform の子にイベントが渡されます。False の場合、イベントはブロックされます(これはATL トランジション で使用され、イベントが old_widget に達することを防ぎます)。

その他 link

show_cancels_hide link
Type:

boolean

Default:

True

通常、非表示中のものと同じタグや名前の displayable や スクリーンが表示されると、非表示中の Displayable やスクリーンは削除され、非表示の transform はキャンセルされます。このプロパティーが非表示する transform で False なら、このキャンセルが起きず、非表示の tranform は最後まで実行されます。

ドキュメントの他の部分で記述される一連の transform プロパティーもあります。 :

3D Stage プロパティー :

perspective, point_to, orientation, xrotate, yrotate, zrotate, matrixanchor, matrixtransform, zpos, zzoom

Model-based rendering プロパティー :

blend, mesh, mesh_pad, shader

GL プロパティー :

The GL properties.

Uniforms:

u_ で始まるプロパティーは custom shaders に使用される uniform です。

プロパティーの順番 link

これらのプロパティーは、以下の順に適用されます :

  1. mesh, blur

  2. tile

  3. pan

  4. crop, corner1, corner2

  5. xysize, size, maxsize

  6. zoom, xzoom, yzoom

  7. point_to

  8. orientation

  9. xrotate, yrotate, zrotate

  10. rotate

  11. zpos

  12. matrixtransform, matrixanchor

  13. zzoom

  14. perspective

  15. nearest, blend, alpha, additive, shader

  16. matrixcolor

  17. GL Properties, Uniforms

  18. 位置プロパティー

  19. show_cancels_hide

廃止された transform プロパティーの一覧 link

警告

より最近の機能と衝突する可能性があるため現在のゲームでは次のプロパティーは使用するべきでありません。これらは互換性を保つためだけに同じ動作を実現する新しい方法とともに残されています。

alignaround link
Type:

(float, float)

anchor, around, anchoraround を同じ値にします。

crop_relative link
Type:

boolean

Default:

True

False 、なら crop の浮動小数要素は元画像の高さと幅の割合ではなくピクセル数の絶対値として処理されます。

ピクセル数の絶対値を表現する場合には、 crop_relative プロパティーを使用する代わりに absolute() インスタンスを crop プロパティーに指定するべきです。必要であれば、不明確な型の値は absolute() callable でラップできます。

size link
Type:

None または (int, int)

Default:

None

これは、浮動小数点値をピクセルの絶対数として解釈する xysize の古いバージョンです。

maxsize link
Type:

None または (int, int)

Default:

None

None を指定しなければ、 指定したサイズのボックスに収まる範囲でアスペクト比を維持しつつ displayable を拡大します。

同じ結果を得るには、 xysize プロパティーにその値を与え、 fit プロパティーの値に "contain" を設定します。

円運動 link

補間ステートメントに clockwisecounterclockwise があれば円形モーションで補間されます。Ren'Py は (pos, align, angle, radius などで設定される) 開始と終了の位置を比較し、極座標の中心 (around) を算出します。そして開始角度から終了角度まで、指定された方向の回転で進む角度を計算します。circles 節を指定すると、Ren'Py は適切な数の円が作られることを保証します。

外部イベント link

以下のイベントは自動的に実行されます :

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, insensitive, selected_insensitive

この transform を含むボタンやこの transform に含まれるボタンが名前通りの状態になったときに引き起こされます。

transofrm の置き換え link

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

この例ではスプライトはプレイヤーがクリックするまで左右に往復します。クリックすると bouncexalign でheadright の xalighn が初期化され、スプライトはプレイヤーが最初にクリックしたときにあった位置から動き始めます。

位置プロパティー (xpos, ypos, xanchor, yanchor) の継承には特別なルールがあり、子で設定された値は親で設定された値を上書きします。これは Displayable の位置は1つのみで、アクティブに設定された位置が優先されるからです。これらのプロパティーは複数の方法で設定されます。例えば xalign は xpos と xanchor を設定します。

最終的に show ステートメントが at 節を含まなければ同じ Displayable が使用されるので継承は不要です。 Displayable を非表示して再度表示すれば継承はされなくなります。

ATL トランジション link

ATL transform を使用してトランジションを定義できます。それらのトランジションは old_widgetnew_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

特別な ATL キーワードパラメーター link

パラメーターリストにそのパラメーターがあれば、特定のコンテキストで Ren'Py が ATL に提供するいくつかのパラメーターがあります。

child

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
old_widget, new_widget

ATL ブロックがトランジションとして使用されるとき、これらはトランジション前と後の Displayable にそれぞれ与えられます。