J'ai des difficultés à faire entrer en collision un rectangle mobile avec plus d'un rectangle.
J'utilise SFML et il a une fonction pratique appelée intersects
qui prend 2 rectangles et renvoie les intersections. J'ai un vecteur plein de rectangles avec lesquels je veux que mon rectangle mobile entre en collision. Je passe en revue cela en utilisant le code suivant (p est le rectangle mobile).
IsCollidingWith
renvoie un booléen mais utilise également des SFML intersects
pour déterminer les intersections.
while(unsigned i = 0; i!= testRects.size(); i++){
if(p.IsCollidingWith(testRects[i]){
p.Collide(testRects[i]);
}
}
et le Collide()
code réel :
void gameObj::collide( gameObj collidingObject ){
printf("%f %f\n", this->colliderResult.width, this->colliderResult.height);
if (this->colliderResult.width < this->colliderResult.height) {
// collided on X
if (this->getCollider().left < collidingObject.getCollider().left ) {
this->move( -this->colliderResult.width , 0);
}else {
this->move( this->colliderResult.width, 0 );
}
}
if(this->colliderResult.width > this->colliderResult.height){
if (this->getCollider().top < collidingObject.getCollider().top ) {
this->move( 0, -this->colliderResult.height);
}else {
this->move( 0, this->colliderResult.height );
}
}
et le IsCollidingWith()
code est:
bool gameObj::isCollidingWith( gameObj testObject ){
if (this->getCollider().intersects( testObject.getCollider(), this->colliderResult )) {
return true;
}else {
return false;
}
Cela fonctionne bien quand il n'y en a qu'un Rect
dans la scène. Cependant, lorsqu'il y en a plus d'un, Rect
cela provoque un problème lors de l'élaboration de 2 collisions à la fois.
Une idée de comment gérer cela correctement? J'ai téléchargé une vidéo sur YouTube pour montrer mon problème. La console à l'extrême droite montre la largeur et la hauteur des intersections. Vous pouvez voir sur la console qu'il essaie de calculer 2 collisions à la fois, je pense que c'est là que le problème est causé.
Enfin, l'image ci-dessous semble bien illustrer mon problème:
collider
objets retournés sont-ils this->getCollider()
mis à jour par this->move()
??