アニメーション待ちのwaタグでフリーズするケース

はじめに

ティラノスクリプト ver471 の話です。

先日、アニメーション中にフリーズすることがあるという話があり、調査しました。
その結果、アニメーション待ちをするwaタグでフリーズしていました。

ティラノスクリプトのanimタグの動作は以下のようになっています。

  • アニメーション開始で 現在アニメーションしている数が +1
  • アニメーション完了で 現在アニメーションしている数が -1

waタグは「現在アニメーションしている数が 0 になるまで待つ」というタグなのですが、アニメーション完了が呼ばれないケースがあり、現在アニメーションしている数が一生 0 にならないことがあります。

そのため、waタグの待ちがずっと続いてしまい、フリーズしてしまうという現象がおきます。

フリーズした場合、ティラノライダーで確認してもwaコマンド移行が実行されていません。
waタグでストップしている

ケース1

キャラが2人以上表示されており、一人がアニメーションしていなくて、片方がアニメーションしているときに、chara_hide_allをした場合です。
例を下に示します。

1
2
3
4
5
6
[chara_show  name="akane" ]
[chara_show name="yamato" ]
[anim name=akane left="-=30" time=1000 effect=jswing]
[anim name=akane left="+=30" time=1000 effect=jswing]
[chara_hide_all time="0"]
[wa]

ケース2

アニメーション中にfreeimageしても同様にフリーズします。

1
2
3
4
5
[chara_show  name="akane" ]
[anim name=akane left="-=30" time=1000 effect=jswing]
[anim name=akane left="+=30" time=1000 effect=jswing]
[freeimage layer=0]
[wa]

簡単な説明

簡単に言うと、chara_hide_allfreeimageもアニメーション中の対象を削除します。削除するのでアニメーション完了が呼ばれません(chara_hide_allに関してはもう少し特殊ですが)。

現状とれる対処

chara_hide_allfreeimageの前でwaを呼び、アニメーション完了を待ってから消す。