私は現在libgxのjavaでbox2dの物理エンジンを使用していますが、私は衝突の問題に直面しています。 問題は、身体が動くのが止まり、フラットエリアにいる間に衝突ポイントが表示されることです。 私が働く方法は、それぞれがブロックを表している複数のボディを作成しており、それらのブロックは並んでいます。ここで、衝突点における ルック:Box2Dの衝突のエラー
体はYのためにここに衝突してはならない体の座標が等しく、それらの側も同じです。
float PPM = 100;
float side = 45;
for (float i = start; i < end; i++) {
/**
* perlin noise for terrain
*/
def.type = BodyDef.BodyType.StaticBody;
float place = Maths.map(noise.noise(off, off), 0, 1, -10, 50);
if (place < 10) {
place = 0;
} else if (place < 20) {
place = side;
} else if (place < 30) {
place = side * 2;
} else if (place < 40) {
place = side * 3;
} else if (place <= 50) {
place = side * 4;
}
place += side/2;
float posx = (i * side);
float posy = place;
float size = side/2f;
def.position.set(posx/PPM, posy/PPM);
b = world.createBody(def);
shape.setAsBox(size/PPM, size/PPM);
fdef.shape = shape;
fdef.isSensor = false;
b.createFixture(fdef);
off += 0.01;
toSetLast = posx + side;
GrassBlock grass = new GrassBlock(b, new
Vector2(b.getPosition().x * PPM, b.getPosition().y * PPM));
//dirt under grass
for (float j = (place/side) - 1; j >= -1; j--) {
posy = j * side;
def.position.set(posx/PPM, posy/PPM);
b = world.createBody(def);
shape.setAsBox(size/PPM, size/PPM);
fdef.isSensor = false;
fdef.shape = shape;
b.createFixture(fdef);
DirtBlock dirt = new DirtBlock(b, new
Vector2(b.getPosition().x * PPM, b.getPosition().y * PPM));
addBlock(dirt.getLocation(), dirt);
}
addBlock(grass.getLocation(), grass);
}
私は今夜これを試してみましょう。しかし、これは私がbox2dの本体をポリゴンとして保持していても、鎖形でポリゴンを作っていればこれでも使えますか? – Liwaa
@Liwaaチェーン形状は、任意の非ソリッド形状を意味します。また、チェイン(およびエッジ)シェイプは、動的ボディに使用するためのものではありません。もしあなたがC++(Javaではなく)を使っていたら、ポリゴンの上を滑っているダイナミックチェーンとエッジシェイプとポリゴンをサポートしている[My fork of Box2D](https://github.com/louis-langholtz/Box2D)を試すことができます。私のフォークはJavaに移植されていません。だからあなたには役に立たない。ちなみに、誰かが興味を持っているなら、私は[この固執する問題を書き留め、それを私のフォークにどのように解決したのか](https://github.com/louis-langholtz/Box2D/blob/dev/Documentation/CollisionHandlng.md) 。 –
@ LousLangholtzそれはチェーンの形状と完璧に動作するように管理し、私は最初にチェーンの形状に問題があった、そして、彼らは動作するように管理しました。ありがとう! – Liwaa