2

ゲーム ループと特定のアニメーションについて、render: メソッドを最後に呼び出してから経過した時間間隔を知りたいです。

このために、CADisplayLink を使用して現在のタイムスタンプを取得し、最後の呼び出しのタイムスタンプを減算します。これにより、2 つのフレーム/呼び出し間の正しい時間間隔が得られるはずです。

シミュレーターでアプリを実行すると、間隔のさまざまな値が得られますが、問題ないようです。ただし、iPad でアプリを実行すると、間隔として 0.000 と 0.125 の 2 つの異なる値しか得られません。ほとんどの場合、これら 2 つの値は交互になります。

間隔を決定するために使用するコードを次に示します。

// Time calculations (for animations and stuff)
_lastCallTime = _currentCallTime;
_currentCallTime = [displayLink timestamp];
float timeInterval = _currentCallTime - _lastCallTime;

NSLog(@"Time since last call: %f", timeInterval);

このコードは、render メソッドが呼び出されるたびに実行されます。

これは、間隔の正確な結果が得られないという iPad の制限ですか?

4

1 に答える 1

1

タイムスタンプは double です。float として保存または使用する変数を NSTimeInterval に変更します。出力するときは %f を使用します (これは、C がパラメーターとして渡されたときに float を double に昇格させるため、実際には %lf です)。

于 2012-08-03T16:12:38.887 に答える