0

ゲーム用に box2d の境界線を作成していて、実際に境界線を越えて体をスライドできることに気付きました。

国境で投げると跳ね返ってきます。しかし、私がゆっくりと彼らをそこに向かって動かしていると、彼らは通り抜けていきます。いくつかのボディを で接続するとRevoluteJoint、ジョイントが実際に境界に絡まってスライドが停止することがあります。ただし、結合されていない場合、境界線はボディ/スプライトを停止しません。

現在、シミュレーターでのみテストしており、テスト用の iPad はまだ持っていません。この問題はシミュレーターに関連していますか? 私のは約30fpsで動いています。

シミュレーターの問題でない場合、解決策はありますか?

私が使用しているコードは、どこにでもあるものです (私のニーズに合わせて少し変更しました:)

b2BodyDef groundBodyDef;
groundBodyDef.position.Set(0,0);   
_groundBody = _world->CreateBody(&groundBodyDef);
_groundBody->SetType(b2_staticBody);


b2EdgeShape groundEdge;
b2FixtureDef boxShapeDef;
boxShapeDef.shape = &groundEdge;

//wall definitions
groundEdge.Set(b2Vec2(-winSize.width/PTM_RATIO, (float)20/PTM_RATIO), b2Vec2((winSize.width)/PTM_RATIO, (float)20/PTM_RATIO)); // bottom wall
_groundBody->CreateFixture(&boxShapeDef);

groundEdge.Set(b2Vec2(-winSize.width/PTM_RATIO, (winSize.height-50)/PTM_RATIO), b2Vec2(winSize.width/PTM_RATIO, (winSize.height-50)/PTM_RATIO)); // top wall
_groundBody->CreateFixture(&boxShapeDef);

groundEdge.Set(b2Vec2(-(winSize.width-20)/PTM_RATIO,0), b2Vec2(-(winSize.width-20)/PTM_RATIO, winSize.height/PTM_RATIO)); // left wall
_groundBody->CreateFixture(&boxShapeDef);

groundEdge.Set(b2Vec2((winSize.width-20)/PTM_RATIO, winSize.height/PTM_RATIO), b2Vec2((winSize.width-20)/PTM_RATIO, 0)); // right wall
_groundBody->CreateFixture(&boxShapeDef); 

}
4

3 に答える 3

1

マウス ジョイントを使用して物を動かしている場合は、マウス ジョイントの collideConnected を true に設定してみてください (デフォルトは false)。

于 2013-06-08T13:32:40.520 に答える
0

動的オブジェクトに質量がないように聞こえます。フィクスチャを作成した後に ResetMassData() を追加してみてください。

これで問題が解決しない場合でも、動的ボディに問題があると思います。その場合、生成コードが必要です。

于 2013-06-07T14:40:36.753 に答える
0

これにはいくつかの理由が考えられます。問題を引き起こす可能性のある 2 つの理由:

  • 境界と衝突させたいボディは、境界とは別の衝突グループにあります。
  • setBullet(true)あなたの問題はいわゆるトンネリング効果である可能性があるため、すべてのボディに設定してみてください
于 2013-06-04T13:30:41.927 に答える