Spineでランタイムのアニメーション再生命令は高機能ですが複雑です。ピンポイントの機能ごとにこまめにメモ投稿してみようと思います。(デモはなし。)
なお、ランタイムはSpine3.4およびStarling2対応のSpine-Staringを使っています。他の言語のランタイムでも基本は同じかと思います。
アニメーションの連続再生
setAnimation
という命令と別に、addAnimation
という命令があります。(addAnimationByName
に対するsetAnimationByName
もあります。)
これは現在のアニメーションのが再生が終わったらすぐさま次のアニメーションを再生する場合に使うものです。
var trackIndex:int = 0; // トラック番号
var delay:Number = 0; // 連続再生の間の秒数
var loop1:Boolean = false; // ループ指定
var loop2:Boolean = false; // ループ指定
animState.setAnimationByName(trackIndex, "アニメ1", loop1);
animState.addAnimationByName(trackIndex, "アニメ2", loop2, delay);
こんな感じで2つのアニメーションを連続再生できます。
2つのアニメーションの再生の合間に、待ち時間が指定できます。上記ソースのdelay指定がそれです。
連続再生のキャンセル
clearTrack命令を使います。
animState.clearTrack(trackIndex);
連続再生の2番目だけキャンセルする、というような事も頑張ってゴニョゴニョすればできそうですが、animStateに対して1命令で実行する方法はありません。
ループアニメーションの取り扱い
後続のアニメーションの前のアニメーションがループ指定だった場合、どうなるでしょう?やってみたところ、ループの1回分再生が終わったところで、次のアニメーションが再生されました。一見、意味がなさそうですが、ループ再生をしている最中に動的に次のアニメーションを追加した場合などにスムーズにアニメーションをつなげる事ができそうです。
アニメーション終了のコールバックについて
こちら別途まとめますが、アニメーション終了のコールバックで次のアニメーションを再生する事もできます。ですが、コールバック内で次のアニメーション再生を行うと挙動がおかしくなるようで、こちらの方法を使う場合は、1フレーム待ってから次の再生指示を出す対応で不具合を回避できました。アニメーションに微妙な間も空いてしまいそうなので、通常はaddAnimation
を使って連続再生を行った方が良さそうです。
以上です。