Transform link

transform を使用して displayable を別の displayable にします。数種類の transform とそれらを作成する様々な方法があります。組み込みの transform を使うと画面上のオブジェクトの位置座標を制御出来ます。ユーザー定義の transform では移動、ズーム、回転、複雑な色効果などより複雑な効果を起こせます。

クイックスタート link

transform は show ステートメントや scene ステートメントに at 節を与えて適用できます。次のコードは、 eileen happy 画像に right transform を適用します。

show eileen happy at right

複数の transform をコンマで区切って適用できます。それら transform は左から右へ順に適用されます。

show eileen happy at halfsize, right

単順なATLによるTransform

transform slide_right:
    xalign 0.0
    linear 1.0 xalign 1.0

label start:
    show eileen happy at slide_right
    pause

Python による Transform の表示

label start:
    $ renpy.show("eileen happy", at_list=right)
    pause

At() を使用した単純な Python transform

init python:
    def show_eileen_rotated():
        rotated = Transform(rotate=45)
        show_stmt = At("eileen happy", rotated)
        renpy.show("eileen", what=show_stmt)

label start:
    $ show_eileen_rotated()
    pause

組み込み 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 を各プロパティーのデフォルト値にリセットし、それ以前に設定されたプロパティーをすべて削除します。

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 ステートメントは、ゲーム内の displayable をアニメーションさせたり配置したりするために使用できる新しい transform を作成します。この transform は再利用可能で、 show ステートメントや scene ステートメントの at 節を使って、ゲーム全体の画像や他の displayable に適用できます。

transform は Displayable としても振る舞え、直接表示できます。ただし、グローバル画像名前空間に存在する他の displayable(画像の定義 を参照)とは異なり、transform は適切な named store (またはデフォルトのストア)内の変数として作成されます。

transform は、 初期化時 (ゲームの起動時)に作成されます。

構文

基本形式

transform <transform_name>:
    <atl_block>

パラメーターつき

transform <transform_name>( <parameters> ):
    <atl_block>

使用法

名前

タイプ

説明

transform_name

word

transform 名

有効なドットで区切られた Python 識別子でなくてはなりません。

(例 my_transformsprites.bounce)

parameters

--

Transform の(任意の)パラメーター

atl_block

block

Transform を定義する ATL コードブロック

パラメータを追加して、transform を柔軟かつ再利用可能にできます。パラメータは、Python の関数パラメータと同様に機能します。

現在以下はサポートされません :

  • (/ を使用する)位置専用パラメーター

  • (デフォルト値なしで * の後に続く) キーワード専用パラメーター

  • 可変長位置パラメーター (*args)

  • 可変長キーワードパラメーター (**kwargs)

注釈

Example

transform left_to_right:
    xalign 0.
    linear 2 xalign 1.
    repeat

transform ariana.left:
    xalign .3

transform animated_ariana_disp(duration=1.0):
    "ariana"
    pause duration
    "ariana_reverse"
    pause duration
    repeat

label start:
    show eileen happy at left_to_right
    pause
    show animated_ariana_disp
    pause

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

スクリプトに ATL コードを含める 2 つ目の方法は、 image ステートメント の一部として含めることです。インライン版と同様に、画像名 (スペースが含まれる場合があります) を指定された transform に紐付けします。パラメーターを指定する方法がないため、 transform がアニメーションを定義する場合にのみ役立ちます。

構文

image <image_name>:
    <atl_block>

使用法

名前

タイプ

説明

image_name

word(s)

画像の名前

atl_block

block

Transform を定義する ATL コードブロック

Example

image animated_ariana_img:
    "ariana"
    pause 1.
    "ariana_reverse"
    pause 1.
    repeat

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

ATL を使用する最後の方法は、 show または scene ステートメントの一部としての使用です。これにより画像に適用される ATL transform がその場で作成され、その内に表示される画像がラップされます。

構文

show <image_name>:
    <atl_block>

scene <image_name>:
    <atl_block>

使用法

名前

タイプ

説明

image_name

word(s)

画像の名前

atl_block

block

Transform を定義する ATL コードブロック

Example

show eileen happy:
    xalign 1.

scene bg washington:
    zoom 2.

ATL の構文とステートメント link

ATL ステートメントは記述している ATL ブロック内でインラインにすることもブロックを構成することもできます。関連するステートメントで説明されている一部の例外を除き、 ATL ブロック内のステートメントは上から下に順番に実行されます。

ATL ステートメントで式の評価が必要な場合、その評価は、その特定の ATL ステートメントが実行されるときではなく、その transform が最初に実行されるとき (つまり、 show ステートメントを使用するとき、または画面の一部としてその transform を表示するとき) に行われます。

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

プロパティーステートメント link

このステートメントは transformプロパティーを設定します。

構文

<property_name> <property_value>

使用法

名前

タイプ

説明

property_name

word

Transform プロパティー名 (例 xalign, alpha, ...)

property_value

Varies

プロパティーの値

このステートメントには、最初に (少なくとも 1 つの) 一連のプロパティー名を指定し、それぞれの後に設定するための新しい値を続けます。 transform プロパティーとその意味、およびそれらが取れる値のリストについては、transform プロパティーの一覧 を参照してください。

Example

transform rightoid:
    xalign .9

transform ariana.left:
    xanchor .3 xpos 100

Number ステートメント link

このステートメントは、指定された時間だけ ATL ブロックの実行を一時停止します。 "pause" キーワードは省略可能です。

構文

pause <duration>

使用法

名前

タイプ

説明

"pause"

keyword

(任意)一時停止を示すキーワード

duration

float, int (expr)

一時停止する秒数

transform pause_example(duration=0.5):
    xalign 0.0

    # Pause for 2.0 seconds.
    pause 2.0
    xalign 1.0

    # Pause for `duration` seconds.
    pause duration
    xalign 0.5

    # Pause for 3.0 seconds.
    3.0

    repeat

補間ステートメント link

補間ステートメントは、スムーズにアニメーションする transform を得る主な方法です。値は開始値から指定値まで時間経過により変化します。

ワープ関数 を使用して時間経過にともなう補間の進行を制御できます。

構文

基本形式

<warper_name> <duration> <atl_property> [<atl_property> ...]

ワープ関数の使用

warp <warper_function> <duration> <atl_property> [<atl_property> ...]

ブロック形式

<warper_name> <duration>:
    <atl_property>
    <atl_property>
    ...

使用法

名前

タイプ

説明

warper_name

word

組み込みのワーパー名

warper_function

str, function (expr)

引数が (t: float) であり、 -> float を返すワープ関数

duration

float, int (expr)

補間の秒数

atl_property

プロパティーステートメント

補間するプロパティー

補間は、指定された時間または少なくとも 1 フレームの間持続します。

Transform プロパティー が指定されていると、それぞれに指定された値は、補間ステートメントの終了時に設定される値になります。

また、 Transform 式 ステートメント も補間でき、この場合は 1 つのプロパティーステートメントのみを含む ATL transform である必要があります。その transform のプロパティーは、この補間に直接書き込まれたかのように処理されます。

基本的な使用

show logo base:
    xalign 0.0 yalign 0.0

    # Take 2.0 seconds to move things to the bottom-left corner.
    linear 2.0 yalign 1.0

ワーカー関数の使用

show logo base(warper_expr="easein"):
    xalign 0.0 yalign 0.0

    # Use the warper in the parameter to move to the right side of the screen.
    warp warper_expr 1.0 xalign 1.0

複数のプロパティー

show logo base:
    xalign 0.0 yalign 0.0

    # Changes xalign and yalign at the same time.
    linear 2.0 xalign 0.5 yalign 0.5

    # The same thing, using a block.
    linear 2.0:
        xalign 0.5
        yalign 0.5

ユーザー定義のワーパー

init python:
    def my_warper(t):
        return t**4.4

    my_warpers = [my_warper]

transform custom_warper_example:
    xpos 0
    warp my_warper 3 xpos 100
    warp my_warpers[0] 5 xpos 520

プロパティーの補間

(カーブする経路の) スプラインモーション:

<atl_property> knot <knot_value> [knot <knot_value> ...]

名前

タイプ

説明

knot_value

Varies (expr)

プロパティー制御点の値

開始点は補間開始時点におけるプロパティーの値で、終了点は <atl_property> に指定された値です。ノットはスプラインを制御するために使用されます。

ノットが 1 つの場合は二次の ベジェ曲線 が使用され、2 つの場合は三次のベジェ曲線が使用されます。3 つ以上の場合は Catmull-Rom が使用されます。前者 2 つの場合、ノットは単に制御点です。Catmull-Rom の場合、最初と最後のノットは制御点(多くの場合、表示される経路の外側)となり、それ以外のノットは経路が実際に通過する点になります。

transform spline_motion_single_property:
    # Start at the bottom right, zoomed out a bit.
    zoom 0.5 xalign 1.0 yalign 1.0

    # Move from to the bottom center, overshooting a bit. Quadratic Bezier curve.
    linear 2.0 xalign 0.5 knot 0.0

    # Move to the top, slowing down at the center. Cubic Bezier curve.
    linear 2.0 yalign 0.0 knot 0.2 knot 0.8

    # Move to the left, oscillating first. Catmull-Rom spline.
    linear 2.0 xalign 0.0 knot 1.0 knot 0.5 knot 0.0

transform spline_motion_multi_property:
    # Start at the bottom right, zoomed out a bit.
    zoom 0.5 align (1.0, 0.0)

    # Use a spline motion to move (x, y) simultaneously in a slight S shape.
    linear 2.0 align (0.5, 1.0) knot (0.0, .33) knot (1.0, .66)

円運動

<atl_property> clockwise
<atl_property> counterclockwise
<atl_property> circles <number_of_circles>

名前

タイプ

説明

number_of_circles

int (expr)

円運動における完全な回転の回数

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

show logo base:
    xalign 1.0 yalign 0.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

Transform 式 ステートメント

<transform_expression>

名前

タイプ

説明

transform_expression

Transform (expr)

補間する transform

この場合は 1 つのプロパティーステートメントのみを含む ATL transform である必要があります。その transform のプロパティーは、この補間に直接書き込まれたかのように処理されます。

show logo base:
    xalign 1.0 yalign 0.0

    # Move to the location specified in the truecenter transform in 1.0 seconds
    ease 1.0 truecenter

pass ステートメント link

pass ステートメントは、何も行いません。つまり、ノンオペレーションです。

構文

pass

これは、2 つの choice ステートメント群 (下記参照) が連続して行われる場合など、ステートメントを分離したい場合に使用できます。また、構文ではブロックを作成する必要があるが、空にする必要がある場合 (たとえば、 choice ブロックの 1 つを何もしないようにする場合など) にも役立ちます。

Repeat ステートメント link

repeat ステートメントは、それを含むブロックの実行を再び最初から始めるステートメントです。

構文

基本形式

repeat

count パラメーターあり

repeat <count>

使用法

名前

タイプ

説明

count

int (expr)

(任意) のブロック実行回数

repeat 2 で終わるステートメントは最高で 2 回実行され、 repeat 1 はリピートしません。

repeat ステートメントは、必ずブロックの最後になければなりません。

Example

show logo base:
    xalign 0.0
    linear 1.0 xalign 1.0
    linear 1.0 xalign 0.0
    repeat

Block ステートメント link

block ステートメントは、単に ATL ステートメントのブロックを含むステートメントです。これを使用してリピートするステートメントのグループを作成できます。

構文

block:
    <atl_block>

Example

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 ブロック群を定義出来ます。

構文

parallel:
    <atl_block>

使用法

名前

タイプ

説明

"parallel"

keyword

一つ以上の parallel ブロック

atl_block

block

一つ以上の ATL ブロックの支流

複数の parallel ブロックを使用すると、それらはすべて同時に実行されます。parallel ステートメントは、最後のブロックが終了した時点で完了します。

各 parallel ブロックは独立しており、異なる Transform プロパティー を変更するようにしてください。例えば、あるブロックは水平方向の移動(xalign)を制御し、別のブロックは垂直方向の移動(yalign)を制御するといった形です。2 つのブロックが同時に同じプロパティーを変更しようとすると、挙動は予測不能になるため避けるべきです。

ブロック内の連続する1つ以上 parallel ステートメントは貪欲に平行群にグループ化されます。

Example

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 ブロックを実行します。その後、最後の選択肢群の後から実行を続けます。

構文

基本形式

choice:
    <atl_block>

weightつき

choice <weight>:
    <atl_block>

使用法

名前

タイプ

説明

"choice"

keyword

一つ以上の選択肢

weight

float (expr)

(任意) この選択肢のウェイト、デフォルトでは 1.0

atl_block

block

この選択肢の ATL ブロック

ブロック内の連続する choice ステートメントは積極的にグループ化されます。simple_expression が指定されていれば、それがそのブロックに浮動小数点数で指定するウェイトになり、なければ 1.0 になります。

pass ステートメントは、いくつかの choice ブロックの群をいくつかの choice ステートメントに分割したり、空の choice ブロックを作成したりする場合に便利です。

Example

image eileen random:
    choice:
        "eileen happy"
    choice:
        "eileen vhappy"
    choice 2.0:
        # More likely to be chosen.
        "eileen concerned"

    pause 1.0
    repeat

Animation ステートメント link

animation ステートメントは ATL ブロックの最初のステートメントでなくてはならず、そのブロックが通常の出現時間軸 (st) ではなくアニメーション時間軸 (at) を使用すると Ren'Py に通知します。

構文

animation

使用法

アニメーション時間軸は同じタグの画像やスクリーンが表示されたときに開始します。これは通常おなじ時間軸で別の物で置き換えられる画像があるときに使用します。

Example

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

On ステートメント link

on ステートメントは、イベントハンドラを定義します。

構文

イベントが一つの場合

on <event_name>:
    <atl_block>

複数イベントの場合

on <event_name>, <event_name>, ...:
    <atl_block>

使用法

名前

タイプ

説明

event_name

word

処理する一つ以上の イベント の名前

atl_block

block

イベント発生時に実行する ATL ブロック

on ブロックは、貪欲に 1 つのステートメントにグループ化されます。on ステートメントは、1 つのイベント名、またはカンマ区切りのイベント名のリストを処理できます。

このステートメントは、イベントを処理するのに使います。あるイベントが処理されるとき、他のイベントの処理は終了し、新しいイベントの処理が即座に始まります。他のイベントが起こることなくイベントハンドラが終了したとき(すでに default イベントを処理していたのでなければ)、 default イベントが引き起こされます。

on ステートメントの実行は自然には終わりません(しかし、time ステートメントや外側のイベントハンドラによって終了され得ます)。

Example

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

Displayable ステートメント link

displayable ステートメントは、ステートメントの実行時に transform の子 displayable を設定または置き換えます。また、ある displayable から別の displayable に切り替える際に、任意でトランジション効果を追加できます。

構文

基本形式

<displayable>

トランジションつき

<displayable> with <transition>

使用法

名前

タイプ

説明

displayable

Displayable (expr)

表示する新しい子画像またはビジュアル要素

transition

Transition (expr)

(任意)displayable を切り替える際のトランジション

(例 dissolve, fade)

注釈

このコンテキストでは、すべてのトランジションが動作するわけではありません。特に 辞書トランジション および move-, ease- トランジションはここでは使用できません。

displayable として transform を使用する場合: すでに子 displayable を持つ別の ATL transform を渡すと、現在の ATL ブロックは一時停止し、含まれた transform のアニメーションが終了するのを待ってから処理を続行します。

警告

子を持たない transform を渡すと、 transform を透明にして何も表示しません。子を持たない ATL transform は Transform 式 ステートメント と解釈され、異なる結果をもたらします。

初心者向け: displayable は、必ず "logo.png" のような画像ファイル名や、内容を持つ displayable など、実際に表示されるものにしてください。

Example

image atl example:
    "logo_base.png"

    pause 1.0

    "logo_bw.png" with Dissolve(0.5, alpha=True)

Transform 式 ステートメント link

このステートメントは、現在の ATL ブロックの一部として別の ATL transform を含みます。

構文

<transform_expression>

使用法

名前

タイプ

説明

transform_expression

Transform (expr)

補間する transform

これは、その ATL transform に子が提供されていない場合 (その方法についてはページの上部を参照) にのみ適用され、それ以外の場合は Displayable ステートメント として解釈されます。指定された ATL transform の内容がこのステートメントの場所に埋め込まれます。

Example

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

Contain インラインステートメント link

このステートメントは現在の ATL transform の子をその式の値に設定 (または置換) でき、アニメーションに役立てます。

構文

contains <displayable>

使用法

名前

タイプ

説明

displayable

Displayable, Transform (expr)

子 Displayable または Transform

Displayable ステートメント は transform 式ステートメントとそれほど明確な違いがなく曖昧さがありますが、その子の置き換えに transition を使用できます。こちらのステートメントはある ATL transform に 別の ATL transform の中身を埋め込むのではなく、その ATL transform を内包したい場合に特に便利です。

注釈

このステートメントは、ATL transform の子として別の ATL transform を含めたい場合に使用します。これは、子を単にコードとして直接含めるのではなく、独立した transform オブジェクトとして扱う必要がある場合に特に有用です。

そうでない場合、単に Displayable ステートメント が 以前の子から新しい子への transition を指定出来る点で子の displayable を指定するのに便利です。

Example

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 ブロック ステートメント link

contains ブロックは、その インライン版 と同様に、 transform の子を設定しますが、方法は異なります。

構文

contains:
    <atl_block>

使用法

1つ以上のcontainsブロックは、単一の contains ステートメント内に貪欲にグループ化され、 Fixed() 内にラップされ、 transform の子として設定されます。

各ブロックは使用する displayable を定義する必要があり、そうしないとエラーが発生します。 contains ステートメントは、子の完了を待たずに即実行されます。

Example

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 コード使用を許可します。

構文

function <func>

使用法

名前

タイプ

説明

func

function (expr)

引数 (trans: Transform, st: float, at: float) を持ち、 float | None を返す呼び出す関数です。

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

  • 第一引数は transform オブジェクトです。 Transform プロパティー はこのオブジェクトの属性として設定できます。

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

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

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

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

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

Example

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 ステートメントは制御ステートメントです。

構文

time <value>

使用法

名前

タイプ

説明

value

float/int (expr)

ブロックの実行開始からの秒数

ステートメントで指定された時間に到達すると、次のステートメントが実行開始します。この制御の変異は以前のステートメントがまだ実行中であってもおこり、そのような以前のステートメントは直ちに停止します。

time ステートメントに到達した時点で指定された値より前である場合、transform は一時停止し、その time ステートメントが制御を所得する時刻まで待機します。

一つのブロックに複数の time ステートメントがある場合、それらは厳密に時間の経過順でなくてはなりません。

Example

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 ステートメントは指定した名前のイベントを引き起こします。

構文

event <event_name>

使用法

名前

タイプ

説明

event_name

word

生成されるイベントの名前

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

外部イベント link

次のイベントは、ATL transform 内で自動的にトリガーされます。

start

on ステートメントに進入したときに、これより高い優先度のイベントが起こらなかった場合に実行される擬似イベントです。

show

transform が show ステートメントや scene ステートメントによって表示され、与えられたタグの画像がまだ存在しない場合に実行されます。

replace

transform が show ステートメントによって表示されて指定したタグの画像を置き換えると実行されます。

hide

transform が hide ステートメントやそれと等価な Python を使って非表示されると実行されます。

なお、これが実行されないときがあります。 transform が scene ステートメント を通して除去されたときや、ゲームメニューの終了などによって所属する コンテキスト が終了したときです。

replaced

transform が他のに置き換えられるときに引き起こされます。画像は、 ATL ブロックが完了するまで実際には非表示にはなりません。

hover, idle, selected_hover, selected_idle, insensitive, selected_insensitive

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

ATL curry と部分的なパラメーターの受け渡し 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_screamerflash_time パラメーターや patricia の transform の wait_time パラメーターなど) か、その行の前の呼び出しで渡された値から来たもの (shorter_screamerwait_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_widgetnew_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 関数の殆どがサポートされます。上記と名前を合せるため、関数はリネームされました。これらの基本関数のグラフはこちらで閲覧出来ます。 https://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) と、それらを設定するためのプロパティ (例えば xalignradius/ 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."

時間軸 link

2 つの時間軸が存在し、よく混同されます。 :

  • ``st``(出現時間軸):この displayable が最初に画面に表示された時点から始まります。

  • ``at``(アニメーション時間軸):同じタグを持つ画像が非表示にされることなく表示された時点から始まります。

displayable がタグなしで表示される場合、 stat は同一になります。

注釈

デフォルトでは、transform は st を使用します。 animation を使用して at に切り替えます。

Transform クラス link

最も単純な ATL transform に相当するものの 1 つは、Transform クラスです。

class Transform(child=None, *, function=None, reset=False, **properties) link

cropping や rotation, scaling, alpha-blending のような処理をその子に適用する transform を作成します。 transform オブジェクトはその子に適用する transform プロパティー に対応するフィールドを持ちます。

child

transform が適用される子

reset

True の場合、 transform はそれが置き換える transform からプロパティーを継承せず、表示時にプロパティーを既定値にリセットします。

function(trans: Transform, st: float, at: float, /) float | 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 が非表示されないようにできます。

original_child link

これは transform が作成された後、 set_child の呼び出し前に設定される子 Displayable です。これは作成中に子がいなかった場合は None になります。

set_child(child) link

新しい child でこのメソッドを呼び出すと、この transform の子を変更します。

update() link

function 引数として渡された関数以外から transform プロパティーフィールドが更新されるときには、これを呼び出して変更を確実に反映する必要があります。

Python による displayable への transform の適用 link

Python により transform t を displayable d に適用する方法はいくつ複数あります :

  1. 最も普遍的かつ推奨される方法は At(d, t) です(下記参照)。これはすべての transform に対して動作します。

  2. d(child=t) はすべての ATL transform に対して動作します。

  3. t(d) はすべての Python transform と位置パラメーターを持たない ATL transform に対して動作します。

At(d, *args) link

指定の displayable dargs のそれぞれの 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 としての 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 であり、そのように使用できます。