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" 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

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 ステートメントや ui 関数を使うとき)。

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.
    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 ステートメント 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 や トランジションとして呼び出されることで、または childold_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

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 オブジェクトの変更の他には副作用を持つべきではなく、予測のためにいつどの数値で呼び出されるか分かりません。

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' = 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 プロパティーの一覧 link

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

型(Type)に position が指定されていれば、整数、浮動小数点数、または absolute にできます。 float ならそれが含まれる領域 (pos ) または displayable (anchor)に対する割合として解釈されます。

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

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:(int, int)
Default:(0, 0)

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

xoffset link
Type:int
Default:0

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

yoffset link
Type:int
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 に設定するのに相当しますえ

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 をそれを中心に子が回転したり、サイズが変更したりする点にします。

zoom link
Type:float
Default:1.0

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

xzoom link
Type:float
Default:1.0

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

yzoom link
Type:float
Default:1.0

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

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() や一部のトランジションのような複雑な処理は加算合成で問題を起こすかもしれません )。

警告

加算合成はOpenGL や DirectX/ANGLE レンダリングエンジンのようにハードウェアベースのレンダリングエンジンでのみサポートされます。ソフトウェアレンダリングエンジンは加算合成された画像を正確に描画出来ないでしょう。

一旦描画システムが開始すると、 renpy.get_renderer_info()["additive"] は加算合成がサポートされていれば True になります。

around link
Type:(position, position)
Default:(0.0, 0.0)

None を指定するか、これを含む領域の左上に対する極座標の中心を指定します。これで中心を設定すると、position モードで円運動ができます。

alignaround link
Type:(float, float)
Default:(0.0, 0.0)

None を指定するか、これを含む領域の左上に対する極座標の中心を指定します。これで中心を設定すると、align モードで円運動ができます。

angle link
Type:float

極座標における位置の角度成分を受け取ります。これは、極座標の中心が設定されていないときには未定義です。

radius link
Type:position

極座標における位置の半径成分を受け取ります。これは、極座標の中心が設定されていないときには未定義です。

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 のサイズを小さくしない

subpixel link
Type:boolean
Default:False

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

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

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

delay link
Type:float
Default:0.0

この transform がトランジションとして使われるなら、これはトランジションの持続時間になります。

events link
Type:boolean
Default:True

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

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

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

matrixcolor link
Type:

None, Matrix または MatrixColor

Default:None

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

これにはモデルベースのレンダリングを config.gl2 を True に設定して有効化する必要があります。

blur link
Type:None or float
Default:None

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

これにはモデルベースのレンダリングを config.gl2 を True に設定して有効化する必要があります。

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

3D Stage プロパティー :
perspective, matrixanchor, matrixtransform, zpos, zzoom
Model-based rendering プロパティー :
blend, mesh, mesh_pad, shader
GL プロパティー :
The GL properties.
Uniforms:

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

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

  1. mesh, blur
  2. tile
  3. pan
  4. crop, corner1, corner2
  5. xysize, size, maxsize
  6. zoom, xzoom, yzoom
  7. rotate
  8. zpos
  9. matrixtransform, matrixanchor
  10. zzoom
  11. perspective
  12. nearest, blend, alpha, additive, shader.
  13. matrixcolor
  14. GL Properties, Uniforms
  15. 位置プロパティー

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

警告

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

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 は開始と終了の位置を比較し、極座標の中心を計算します。そして Ren'Py は開始角度から終了角度まで、指定された方向の回転で進む角度を計算します。円運動の節が与えられたら、Ren'Py は適切な数の円が作られることを保証します。

Ren'Py は angle および radius プロパティーを適切に補間し、円形運動を起こします。 transform が align モードの場合、angle および radius を設定すると align プロパティーが設定されます。そうでなければ、pos プロパティーが設定されます。

外部イベント 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

この 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 にそれぞれ与えられます。