ゲーム用に 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);
}