Ren’PyのATLアニメーションをクリックでスキップできるようにする

 Ren’Pyでは(全レイヤーに作用する)トランジションはクリックでスキップ出来ますが、ATLアニメーションはスキップ出来ません。なのでこれをスキップ可能にしたいならば以下のようにすると良いでしょう。


    window auto hide #ウィンドウ非表示
    show sylvie green smile: #1秒かけてxpos=1に移動
        xpos 0.5
        linear 1. xpos 1.0
    pause 1 #1秒間のポーズ
    show sylvie green smile: #即座にxpos=1に移動
        xpos 1.0
    window auto show #ウィンドウ表示

こうするとアニメーション中にクリックするとポーズが終了して即アニメーション終了時点での位置に移動します。クリックしなけらば終了までアニメーションは続き、終了後の画面が即座に表示されますが、実際の状態に変化がないので画面は何も変わりません。

 ただし一部がループしているとかなりやっかいです。以下のコードでは回転しながら移動していますが、pause後の画像表示時に回転角度がずれます。これはATLは通常出現時間軸といってそのATLが開始された時点を0としてスタートする時間軸で動作しているため、pause後は時間が0から始まってpause前の画像と一致し無くなるためです。


    window auto hide #ウィンドウ非表示
    show sylvie green smile: #1秒かけてxpos=1に移動
    	parallel:
		xpos 0.5
		linear 1. xpos 1.0
	parallel:
		rotate 0
		linear 1 rotate 360
		repeat True
    pause 1 #1秒間のポーズ
    show sylvie green smile: #即座にxpos=1に移動
        xpos 1.0
	parallel:
		rotate 0
		linear 1 rotate 360
		repeat True
    window auto show #ウィンドウ表示

 ATLにはanimationステートメントが有り、これを使用するとアニメーション時間軸でATLが動作します。アニメーション時間軸はそのタグの画像が最初に表示されたときを0として開始し、タグを置き換えても共通なのでスムーズに繋がるようになります。

https://ja.renpy.org/doc/html/atl.html#animation-statement

 ただし、最初にそのタグを表示した時間を0とするということは以下のようなATLで使用すると問題となります。

    show sylvie
    pause 3 #最初にsylvieが表示されてから3秒待機
    show sylvie:
        animation
        xpos 0.5
	linear 1. xpos 1.0

 すでにタグ表示後から1.秒以上たっているため、アニメーションせずにいきなりxpos1.0に移動します。なので何も考えなくともスムーズに繋げてくれるようなものではありません。これを防ぐには直前で一瞬そのタグを非表示にして表示し直すとかしないといけません。

 他に面倒ですがpause前後でループ位置がずれないようにきっちり計算してタイミングを合わせる方法もあります。

Pocket

コメントを残す

メールアドレスが公開されることはありません。