Bonjour,
Jusqu'à maintenant lorsque je codais mon jeu de plateforme seul la collision du bas de mon personnage m'intérressée, je n'avais aucun problème. Mais maintenant, je m'intèresse aussi à la droite et à la gauche. J'ai codé cette fonction mais lorsque je suis en l'air et que je me cogne à un mur mon personnage reste en fait à la même hauteur, cela est du à la position de mes tests. Ma question est donc comment y arriver. Peut-être que je suis parti dans la mauvaise voie.
Mon code :
void Organisme::collisionMap(int *level, int width, int height)
{
//initilisation de la variable pour nous faire chuter s'il n'y a pas collision
onGround = false;
int haut = organisme.getPosition().y;
int gauche = organisme.getPosition().x;
int droite = organisme.getPosition().x + 32;
int bas = organisme.getPosition().y + 32;
for (int x = 0; x < width; x++)
{
for (int y = 0; y < height; y++)
{
int hautM = y * 32;
int basM = y * 32 + 32;
int gaucheM = x * 32;
int droiteM = x * 32 + 32;
if (level[x + y*width] == 2 || level[x + y*width] == 4 || level[x + y*width] == 1 || level[x + y*width] == 6 || level[x + y*width] == 9 || level[x + y*width] == 10)
{
//test si il y a ue collision avec le bas du personnage
if (std::abs(bas - hautM == 0) && gauche >= gaucheM && gauche <= droiteM || std::abs(bas - hautM == 0) && droite >= gaucheM && droite <= droiteM)
{
organisme.setPosition(organisme.getPosition().x, hautM-32);
onGround = true;
break;
}
//test si il y a une collision sur la droite
if (std::abs(droite - gaucheM == 0) && haut >= hautM && haut <= basM || std::abs(droite - gaucheM == 0) && bas >= hautM && bas <= basM)
{
organisme.setPosition(gaucheM - 31, organisme.getPosition().y);
break;
}
//test si il y a une collision sur la gauche
else if (std::abs(gauche - droiteM == 0) && haut >= hautM && haut <= basM || std::abs(gauche - droiteM == 0) && bas >= hautM && bas <= basM)
{
organisme.setPosition(droiteM + 33, organisme.getPosition().y);
break;
}
}
}
}
if (organisme.getPosition().x <= 0)
{
organisme.move(0.5, 0);
}
else if (organisme.getPosition().x + 32 >= 32 * width)
{
organisme.move(-0.5, 0);
}
}
Merci de votre aide.