0

私はcocos2dとbox2dにかなり慣れていません。加速度計を使用して、ゲームの水平エンドレスランナーを作成しようとしています。キャラクターが上から落ちてきて、常に下に動いています。私が遭遇している問題は、時間の経過とともにスプライトと物理ボディが同期しなくなり、物理ボディがスプライトから離れて、衝突で奇妙な動作を引き起こすことです。これは、デバイスで実行した場合にのみ発生します。これは、プレーヤーが常に下に移動しているため、衝突が垂直方向に同期しなくなり、水平方向が正しいままになるためです。私の階段関数は:

const float32 timeStep = 1.0f / 30.0f;
const int32 velocityIterations = 5;
const int32 positionIterations = 1;

// step the world
world->Step(timeStep, velocityIterations, positionIterations);
4

1 に答える 1

0

私たちが話している距離はどれくらいですか?Box2Dボディを非常に長い距離(数千のBox2Dメートル)で移動している場合、物理シミュレーションまたはcocos2d位置(あるいはその両方)のいずれかで不正確に遭遇し、説明した効果につながる可能性があります。

2D物理エンジンは、制約のない世界(つまり、無限のスクロール)で動作するようには設計されていません。それがあなたがしていることであるならば、あなたは世界が制約である解決策を考え出さなければならないでしょう、しかしプレーヤーはこれに気づいていません。一般的な方法は、オブジェクトと関連するビューの位置を、特定のしきい値を超えたら(制約された)ワールドのトップにリセットすることです。ほとんどのゲームは、プレーヤーを所定の位置にロックし、代わりにプレーヤーの下にある世界を動かして、無限の動きの印象を与えますが、背景だけが動いています。

于 2012-10-25T14:00:07.140 に答える