J'ai réussi à intégrer la bibliothèque Bullet Physics dans mon système d'entités / composants. Les entités peuvent entrer en collision les unes avec les autres. Maintenant, je dois leur permettre d'entrer en collision avec le terrain, qui est fini et semblable à un cube (pensez à InfiniMiner ou à son clone Minecraft ). J'ai commencé à utiliser la bibliothèque Bullet Physics hier seulement, alors peut-être que je manque quelque chose d'évident.
Jusqu'à présent, j'ai étendu la RigidBody
classe pour remplacer la checkCollisionWith(CollisionObject co)
fonction. Pour le moment, ce n'est qu'une simple vérification de l'origine, sans utiliser l'autre forme. Je répéterai cela plus tard. Pour l'instant, cela ressemble à ceci:
@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;
}
Cela fonctionne très bien, en ce qui concerne la détection des collisions. Cependant, cela ne gère pas la réponse de collision. Il semble que la réponse de collision par défaut consiste à déplacer les objets en collision en dehors des formes les uns des autres, éventuellement leurs AABB.
Pour le moment, la forme du terrain n'est qu'une boîte de la taille du monde. Cela signifie que les entités qui entrent en collision avec le terrain tirent juste à l'extérieur de cette zone de taille mondiale. Il est donc clair que je dois soit modifier la réponse à la collision, soit créer une forme qui s'adapte directement à la forme du terrain. Alors, quelle option est la meilleure et comment procéder pour la mettre en œuvre? Peut-être y a-t-il une option à laquelle je ne pense pas?
Il est à noter que le terrain est dynamique et fréquemment modifié par le joueur.