Pracuję nad moją pierwszą grą, używając libgdx z box2d. Używam renderera debugowania do testowania moich obiektów. Stworzyłem trochę samochodów jak obiekty. Każdy samochód ma główną bryłę, która jest dużym wielokątem 6 punktów (około 1 metra długości, 0,7 metra wysokości) i ma 2 koła połączone obrotowymi stawami.Zderzenie w libgdx box2D nie działa dla niektórych organów
Samochód główny ma dołączoną armatę i karabin maszynowy, również za pomocą połączeń obrotowych.
Problem, przed którym stoję, polega na tym, że duża część samochodu nie dokonuje kolizji zgodnie z przeznaczeniem. Kiedy 2 samochody hit siebie, są one pokrywają, tak:
Kilka uwag:
- Koła i armaty (mniejsze kształty) robią kolizji grzywny. Kiedy koła dotkną ciał zatrzymują się
- Jeśli wykryję kolizję za pomocą kodu, kolizja faktycznie się dzieje
- Próbowałem tego z mniejszym obiektem (pocisk wystrzelony z karabinu maszynowego) i ustawiłem obiekt "isBullet" "własność na true, jak widziałem w innym poście (not proper collision in box2d), ale miał taki sam wynik (kula jest zakreślona na czerwono):
Oto kod używam, aby stworzyć ciała:
protected Body createBody(Material material, Shape shape, BodyType type, WorldWrapper world)
{
BodyDef bodyDef = new BodyDef();
bodyDef.type = type;
bodyDef.position.set(initialPosition);
Body body = world.createBody(bodyDef);
FixtureDef fixtureDef = new FixtureDef();
fixtureDef.density = this.material.getDensity();
fixtureDef.friction = this.material.getFriction();
fixtureDef.restitution = this.material.getRestitution();
fixtureDef.shape = shape;
body.createFixture(fixtureDef);
return body;
}
Samochód idzie do przodu za pomocą silników na kołach zawinięty stawów, zbudowane tak:
public void goForward()
{
for (RevoluteJoint joint : wheelJoints)
{
joint.enableMotor(true);
joint.setMotorSpeed(-this.engineSpeed);
joint.setMaxMotorTorque(this.engineTorque);
}
}
Używam następujące wartości:
Density = 2500;
Restitution = 0;
Friction = 0.1;
BodyType = Dynamic;
używam 1/60 sekundowy światowy krok, z prędkościąIperacje = 6 i positionIterations = 2
Jakieś pojęcie o tym, czego tu brakuje?
Dzięki! Spróbuję tego dzisiaj. Stworzyłem ten projekt 3 tygodnie temu i użyłem funkcji aktualizacji libgdx w pliku wykonywalnym instalacji. Czy zmiany są nowsze? – Charbel
Z tego, co widzę na GitHub, zmiana została dodana 22 marca. Najnowsza wersja wydania libgdx pochodzi z 16 marca, więc obecnie jest tylko w nocnych klubach. – Shinni
Zmieniłem wielokąt, aby miał wypukły kształt i to był problem. Użyję sugestii dwóch prostokątów. Dzięki! – Charbel