DTween 110911版。
今回はたくさんバグを仕込んだ気がする^p^
修正点
Platform.GetTickのバグ(QC#98747)を回避
DTweenは処理をする際に時間情報が必要なので、WindowsではtimeGetTimeを使っていたんですが、MacやiOSにはそんなAPIはありません。なんてこったい。
で、そういう場合のためにFireMonkeyではTPlatformクラスがGetTickという環境に依存しない時間取得メソッドを用意してくれているんですが、これの返す型がSingleな上に元々ミリ秒なのを1000で割った値を返してくるので、単精度浮動小数点数の仕様上、ミリ秒の段階で値が23bitに達した時点で小数点以下の精度が失われ始めます。最悪の場合1秒単位でしか取得できなくなるので、ぶっちゃけGetTickは使えません。
というわけでこのバグを回避するようにしました*1。
新機能
TTweenにReverse, Scale, Sliceを実装
Reverseはトゥイーンを逆再生状態にしたトゥイーンを生成します。
Scaleはトゥイーンの継続時間をスケールしたものを生成します。
Sliceはトゥイーンの一部分を切り取って、それを新しいトゥイーンとして生成します。
…と、この説明だけではたぶん何のことか分かりづらいと思うので、新しいデモを用意してみました。
簡単に説明すると、カメラの動きと球体の落下をParallelで1つのトゥイーンとして作成し、それをSliceで3つに分解した後、真ん中の部分をScaleで時間を引き延ばし、スローモーションのような効果を与えています。そして最後にReverseで全体を逆再生にしたものを作成し、さらにSerialで繋げて一連のアニメーションにしている…といった感じです。
このデモは今回からアーカイブに含めてあるので見てもらえれば分かると思うんですが、IDEが生成したコードを除くと実装部分はだいたい50行と短めです。さらにその1/3程度は球体の作成に費やしてるので、この複雑な動きが非常に簡潔に書けているのが分かると思います*2。
おまけネタ
dpr2xcodeが微妙に残念な子で、Delphiのライブラリパスとして設定しているフォルダにあるソースコードをXcodeプロジェクトに組み込んでくれない…という話は先日書いたとおりですが、Xcode側でライブラリパスを認識させる方法が分かりました。正確にはXcodeプロジェクトファイル(project.pbxproj)内にコンパイル用のシェルスクリプトのコードが書いてあるので、その中のコンパイルオプションを弄ります*3。
書いてある場所はファイル内を「shellPath」で検索して、その次の行にある「shellScript」という項目の部分です。その中の「-Fu」というオプション部分でライブラリパスを指定しているので、他にもいくつか記述済みのライブラリパス指定部分を参考にしながらパスを書けばOKです。新たに「-Fu」を書き足さなくても、コロン(:)でパスを区切って続けて書いてもOKです。
注意点としては、設定がiPhoneシミュレータコンパイラ用と実機コンパイラ用の二種類が含まれているので、その両方を設定する必要があります。