J'utilise actuellement le moteur physique box2d dans java dans libgx, et je suis confronté à des problèmes de collision. Le problème est que le corps cesse de bouger et qu'un point de collision apparaît sur une surface plane. La façon dont je travaille est que je fais plusieurs corps, chacun représentant un bloc, et ces blocs sont côte à côte. Regardez le point de collision ici:Erreur de collision Box2D
le corps ne doit pas entrer en collision ici pour la coordonnée Y des corps est égal, et de leur côté est égal aussi bien.
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);
}
Je vais essayer ce soir, et je reviendrai à vous. Bien, cela fonctionnerait-il encore si je gardais le corps de box2d en tant que polygone, mais ai fait ce polygone avec un chainhape? – Liwaa
@Liwaa La forme de la chaîne est destinée aux formes arbitraires non solides. De plus, les formes de chaîne (et de bord) ne sont pas destinées à être utilisées pour des corps dynamiques. Si vous utilisiez C++ (au lieu de Java), vous pouvez essayer [ma fourche de Box2D] (https://github.com/louis-langholtz/Box2D) qui supporte les formes dynamiques de chaînes et de bords et les polygones qui glissent sur des polygones. Cependant, ma fourche n'est pas portée vers Java. Donc, cela ne vous sert à rien. Incidemment, j'ai [une description de ce problème de collage et comment je l'ai résolu dans ma fourche] (https://github.com/louis-langholtz/Box2D/blob/dev/Documentation/CollisionHandlng.md) si quelqu'un est intéressé . –
@LousLangholtz il a réussi à travailler avec la forme de la chaîne parfaite, j'ai d'abord eu des problèmes avec la forme de la chaîne, puis ils ont réussi à travailler. Merci! – Liwaa