Ich habe die Bullet Physics-Bibliothek erfolgreich in mein Entitäts- / Komponentensystem integriert. Entitäten können miteinander kollidieren. Jetzt muss ich ihnen ermöglichen, mit dem Gelände zu kollidieren, das endlich und würfelförmig ist (denken Sie an InfiniMiner oder den Klon Minecraft ). Ich habe erst gestern angefangen, die Bullet Physics-Bibliothek zu benutzen, also fehlt mir vielleicht etwas Offensichtliches.
Bisher habe ich die RigidBody
Klasse erweitert, um die checkCollisionWith(CollisionObject co)
Funktion zu überschreiben . Im Moment ist es nur eine einfache Überprüfung des Ursprungs, ohne die andere Form zu verwenden. Ich werde das später wiederholen. Im Moment sieht es so aus:
@Override
public boolean checkCollideWith(CollisionObject co) {
Transform t = new Transform();
co.getWorldTransform(t);
if(COLONY.SolidAtPoint(t.origin.x, t.origin.y,t.origin.z)){
return true;
}
return false;
}
Dies funktioniert hervorragend, um zu erkennen, wann Kollisionen auftreten. Dies behandelt jedoch nicht die Kollisionsreaktion. Es scheint, dass die Standardkollisionsantwort darin besteht, die kollidierenden Objekte außerhalb der jeweils anderen Formen, möglicherweise ihrer AABBs, zu verschieben.
Im Moment ist die Form des Geländes nur eine Kiste von der Größe der Welt. Dies bedeutet, dass die Entitäten, die mit dem Gelände kollidieren, nur außerhalb dieser Weltgröße schießen. Es ist also klar, dass ich entweder die Kollisionsreaktion ändern oder eine Form erstellen muss, die direkt der Form des Geländes entspricht. Welche Option ist die beste und wie implementiere ich sie? Vielleicht gibt es eine Option, an die ich nicht denke?
Es ist zu beachten, dass das Gelände dynamisch ist und vom Spieler häufig geändert wird.