DTween 110814版。
昨日の今日で仕様変わってますけどまあそれはそれで。
仕様変更
プロパティ値取得のタイミングを変更
値の相対指定時や、省略されたプロパティ値の取得のタイミングを「Tweenメソッドのコール時」から「初めてトゥイーンを実行した時」に仕様を変更しました。
これによって何がどうなるかというと、
// Form1.Left = 0 TTween.Serial([ TTween.TweenTo(Form1, ['$Left', 100], 1000), // A TTween.TweenTo(Form1, ['$Left', 100], 1000) // B ]).Play;
こういった記述をした場合、古い仕様ではプロパティ値の取得が再生如何にかかわらずトゥイーン定義時に一括で行われるため、Aは0〜100に変化し、Bではまた0〜100になってました。
これが新しい仕様ではAは再生時点でのLeft値が0なので0〜100に変化し、Bでは再生時点でのLeft値がAの実行により100となっているので、100〜200と変化するようになります。
新しい機能
TTweenにCycleメソッドを追加
これは任意のトゥイーンを指定回数繰り返すだけのトゥイーンを返します。
// Form1.Left = 0 TTween.Cycle(2, TTween.TweenTo(Sender, ['$Left', 100], 1000)).Play;
こう書くと0〜100に変化した後、また0〜100に変化します。
上記の仕様変更と合わせて考えると、0〜100になった後100〜200と変化しそうですが、あくまでもプロパティ値の取得は「初めて」実行した時なので、2度目の再生ではその時の値が使用されます。注意。
余談ですが、ほんとはRepeatメソッドにしたかったんだけど(他のTweenライブラリではだいたいそうなので)、Delphiではrepeatが予約語で基本的には使えず、拡張識別子という機能で先頭に&記号を付けて無理矢理使えなくも無いんですが、これをやると今度はIDEが正しくコードを認識しなくなってクラス補完等の機能がうまく動かなくなるクソ不具合が出るので泣く泣く諦めました(#^ω^)
TEasingクラスにCombineメソッドを追加
これは2つのイージング関数を合成します。イメージとしてはこちらの方法に似てますが、あちらがトゥイーンを合成するのに対して、Combineはイージング関数そのものを合成します。
使い方はこんな感じ。
TTween.TweenTo(Sender, ['$Left', 100], 1000, TEasing.Combine(TEasing.Linear, TEasing.SineEaseOut, 0.8)).Play;
デモのグラフ描画をCombine対応にしておいたので、合成後の動きの把握はそれでやると分かりやすいかもしれないです。
試してないですが(てへ)Combineのネストも可能なので、3つ以上のイージング関数を合成することもできると思います。