Ich benutze zur Zeit box2d Physik-Engine in Java in libgx, und ich habe Probleme mit Kollisionen. Das Problem ist, dass der Körper sich nicht mehr bewegt und ein Kollisionspunkt auf einem flachen Bereich erscheint. Die Art, wie ich arbeite, ist, dass ich mehrere Körper mache, die jeweils einen Block darstellen, und diese Blöcke sind nebeneinander. Blick auf dem Kollisionspunkt hier:Box2D Kollisionsfehler
der Körper soll nicht hier kollidieren für die Y des Körpers Koordinate gleich, und ihre Seite ist auch gleich.
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);
}
Ich werde das heute Abend versuchen und zu dir zurückkommen. Obwohl, würde das immer noch funktionieren, wenn ich den box2d Körper als ein Polygon behalten würde, aber dieses Polygon mit einer Kettenform machte? – Liwaa
@Liwaa Kettenform ist für beliebige nicht feste Formen gedacht. Auch die Ketten- (und Kanten-) Formen sollen nicht für dynamische Körper verwendet werden. Wenn Sie C++ (statt Java) verwenden, können Sie [my fork von Box2D] (https://github.com/louis-langholtz/Box2D) ausprobieren, das dynamische Ketten- und Kantenformen und Polygone unterstützt, die über Polygone gleiten. Mein Fork wird jedoch nicht nach Java portiert. Es nützt dir also nichts. Übrigens habe ich [eine Beschreibung dieses Problems und wie ich es in meiner Gabel gelöst habe] (https://github.com/louis-langholtz/Box2D/blob/dev/Documentation/CollisionHandlng.md), wenn jemand interessiert ist . –
@LousLangholtz es geschafft, mit der Kettenform perfekt zu arbeiten, hatte ich zuerst Probleme mit der Kettenform, dann haben sie es geschafft zu arbeiten. Vielen Dank! – Liwaa