以下のコードで何が問題なのか誰でも見つけられますか? 前の TIME_STEPS フレーム数のフレーム間隔 (dt) を平均化することになっています。
私は Box2d と cocos2d を使用していますが、cocos2d ビットはあまり関係がないと思います。
-(void) update: (ccTime) dt
{
float32 timeStep;
const int32 velocityIterations = 8;
const int32 positionIterations = 3;
// Average the previous TIME_STEPS time steps
for (int i = 0; i < TIME_STEPS; i++)
{
timeStep += previous_time_steps[i];
}
timeStep = timeStep/TIME_STEPS;
// step the world
[GB2Engine sharedInstance].world->Step(timeStep, velocityIterations, positionIterations);
for (int i = 0; i < TIME_STEPS - 1; i++)
{
previous_time_steps[i] = previous_time_steps[i+1];
}
previous_time_steps[TIME_STEPS - 1] = dt;
}
previous_time_steps 配列には、アニメーション間隔が設定されているものも最初に入力されます。
これも私が期待することをしません。フレーム レートが低いデバイスではシミュレーションが高速になり、フレーム レートが高いデバイスでは遅くなります。私が見過ごしているのは愚かなことだと確信しています。
box2D が一定時間のステップで動作することを好むことは知っていますが、実際には選択の余地がありません。私のゲームはさまざまなデバイスで非常に変動するフレーム レートで実行されるため、一定の時間停止は機能しません。ゲームは平均 40 fps で実行されますが、第 1 世代の iPad などの一部の粗末なデバイスでは、1 秒あたりわずか 30 フレームで実行されます。第 3 世代の iPad は、毎秒 50/60 フレームで動作します。
この問題に対処する他の方法についても提案を受け付けています。アドバイスをいただければ幸いです。
誰かが何らかの洞察を持っている可能性があることに注意する必要があるその他の珍しいことは、ビルドでデバッグの最適化を実行すると、上記に大きな影響を与えるという事実です。デバッグ最適化が -Os 対 -O0 に設定されている場合、フレーム レートはあまり変化しません。しかし、デビューの最適化が -Os に設定されている場合、上記のコードがアクティブな場合、物理シミュレーションは -O0 よりもはるかに高速に実行されます。上記のコードの代わりに間隔として dt を使用した場合、デバッグの最適化に違いはありません。
私はそれで完全に混乱しています。