任意のイベントをDisplayableに渡してATLで処理する

ATLではイベントの処理が出来、主に表示時と非表示時で異なる演出を付けるのに利用されます。

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

この他にも以下の外部イベントを受け取られますが、ユーザーが任意のタイミングで任意のイベントを投げたい場合もあるでしょう

https://ja.renpy.org/doc/html/atl.html#external-events

event ステートメントで内部から任意のイベントを投げてGOTOのような使い方もできますが、これでは外部からイベントを渡せません

show logo base:
    on show:
        alpha 0.0
        linear .5 alpha 1.0
        event test
    on hide:
        linear .5 alpha 0.0
        event test
    on test:
        ...

以下のようにすると外部から任意のDisplayableにイベントを投げられます。

#画像に対しては以下のようにDisplayableを所得します
sle = renpy.game.context().scene_lists
d = sle.get_displayable_by_tag("<画像のレイヤー>", "<画像のタグ>")

#screenに対しては以下のようにDisplayableを所得します
d = renpy.get_screen("<スクリーン名>")

#所得したDisplayableに対して以下の関数を実行してイベントを投げます
d.set_transform_event("<任意のイベント名>")

これを活用すれば、外部の何らかの操作に反応する画像が定義できます。

ATLは現バージョン(24/7/2)では相対値が指定できませんが、対応予定にはあります。対応すればキーボードの矢印キーで移動するアクションゲームに役立ちそうな画像が簡単に作れるので将来に期待しましょう。

Pocket