1

CADisplayLink60fps、30fps、または15fpsのいずれかでタイマーを設定するために使用し、加速度計を使用する場合

acceleration.x

x加速を処理するために、オブジェクトの位置が2倍の頻度で更新されるため、60fpsは30fpsの2倍の加速を作成します。現実的な加速のためにこれをどのように正しく処理できますか?(おそらく実際の重力による引っ張りをシミュレートするため)。


更新: 私は間違いを犯したと思います。これはのfpsではありませんCADisplayLinkが、加速度計のイベントハンドラーの頻度です。1 / 60.0、1 / 30.0、または1 / 15.0に設定すると、オブジェクトの加速が遅くなります...イベントハンドラーが

objVelocity.x += acceleration.x;

速度の増加を遅くするために周波数を自動調整する必要があると思いましたが、そうではありませんか?

4

1 に答える 1

0

概念が間違っています。100 fpsに設定しても、加速度はまったく同じになります。モーションマネージャが変更するまで加速度は一定であるため、変更されません。これは、設定した更新頻度に基づいて行われます。たとえそれが変わったとしても、それは加速がどのように機能するかではないので、あなたはそれを単に「追加」することはできません。デバイスは、それを読んだ瞬間に加速度(デバイスの動きを使用しない限り重力を含む)を提供します。

速度を取得したい場合は、fpsの差を補正する時間係数があります。位置が必要な場合は、二重積分によるノイズが発生するため、状況はさらに複雑になります。また、読み取り値が期待したほど速く変化しない可能性があることを考慮する必要があります。私の実験によると、1秒間に約70回に安全に設定できますが、使用するデバイス(4秒または4秒など)によって異なります。

したがって、参照用に:

加速度計は加速度を提供します。これは常に単一の読み取り値であり、任意の時点でのデバイスの加速度に依存します。

速度を取得する加速度を統合すると、これが取得しようとしているように見えます。方程式は次のようになります。

v = u + a * t

ここで、初期速度(以前の速度u)に追加する合計速度を取得する方法を注意深く見てください。新しい速度は、加速度に時間を掛けたものです(加速度は加速度計からの読み取り値であり、時間は時間間隔です)。読み取りの間)。

例えば:

オブジェクトは動きがない状態から始まります。加速度計は0を読み取る必要があります(モーションマネージャーではなく裸の加速度計を使用している場合を除きます。この場合、重力が表示されます)。これで、すばやく右に移動し、デバイスはそれぞれ.2秒の差分で5回の読み取りを行います。

つまり、1 2 1 -1 -2 ...と言うことができます。これは、最初は加速しますが、減速し始めると減速しますが、それでも最初の読み取り値を考慮すると、そのときの速度は0 *1*です。 .2、現在は.2 + 2 * .2などです。理想的には、運動の法則により、移動を開始してから移動を終了するまでのすべての速度の合計は0になります。

変位を取得したい場合、正確に取得するのは非常に複雑です。これは、再度統合する必要があり、二重積分はエラーの点で狂気であるためです。

変位を取得する方法はいくつかあります。実際、スタックオーバーフローのいくつかの投稿を覚えています。これらの投稿では、デバイスの加速度計を使用して変位を取得する方法について説明しています。

于 2012-04-27T03:38:18.737 に答える