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 intersectsqui 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).
IsCollidingWithrenvoie un booléen mais utilise également des SFML intersectspour 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 Rectdans la scène. Cependant, lorsqu'il y en a plus d'un, Rectcela 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:

colliderobjets retournés sont-ils this->getCollider()mis à jour par this->move()??