1
Général / Re: TileMap Collision (un bug étrange)
« le: Juillet 10, 2017, 08:17:11 am »
re-Bonjour/Bonsoir
J'ai cogité de mon côté afin de trouver une solution et je me suis dis, avec plus de précision(donc plus de point) je devrais pouvoir limiter mon problème au maximum afin de rendre ce bug quasi-inexpoitable.
Et donc décidé de vérifier des points autour des côté de mon rectangle, plutôt que les coins entre eux.
Mon rectangle se déplaçant à une vitesse de 2.5f avec un tour de boucle toutes les 1/60 seconde et une tile de 32 pixel, je ne peux pas aller en dessous des 1/8 sinon, lorsque je rentrerais en contact avec un mur, les points que j'ai choisis autour de mon coin seront tous en contact et ça ne fonctionneras plus.
Malheureusement, ça ne fonctionne tout de même pas, mais je ne comprend pas pourquoi :/
Voici mon code :
Encore une fois, merci d'avance pour votre attention et aide
Bonne journée
J'ai cogité de mon côté afin de trouver une solution et je me suis dis, avec plus de précision(donc plus de point) je devrais pouvoir limiter mon problème au maximum afin de rendre ce bug quasi-inexpoitable.
Et donc décidé de vérifier des points autour des côté de mon rectangle, plutôt que les coins entre eux.
Mon rectangle se déplaçant à une vitesse de 2.5f avec un tour de boucle toutes les 1/60 seconde et une tile de 32 pixel, je ne peux pas aller en dessous des 1/8 sinon, lorsque je rentrerais en contact avec un mur, les points que j'ai choisis autour de mon coin seront tous en contact et ça ne fonctionneras plus.
Malheureusement, ça ne fonctionne tout de même pas, mais je ne comprend pas pourquoi :/
Voici mon code :
int ux,dx,x1,x2,uy,dy,y1,y2;
//Coordonnées des quatre coins
x1 = rect.getPosition().x/32;
y1 = rect.getPosition().y/32;
x2 = (rect.getPosition().x + rect.getSize().x -1)/32;
y2 = (rect.getPosition().y + rect.getSize().y -1)/32;
//Coordonnées des points choisis
ux = (rect.getPosition().x + rect.getSize().x*1/8 -1)/32;
dx = (rect.getPosition().x + rect.getSize().x*7/8 -1)/32;
uy = (rect.getPosition().y + rect.getSize().y*1/8 -1)/32;
dy = (rect.getPosition().y + rect.getSize().y*7/8 -1)/32;
//Bas
if(((v[y2][x1] != numVide) && (v[y2][ux] != numVide))
|| ((v[y2][x2] != numVide) && (v[y2][dx] != numVide)))
moveSprite.y--;
//Haut
else if(((v[y1][x1] != numVide) && (v[y1][ux] != numVide))
|| ((v[y1][x2] != numVide) && (v[y1][dx] != numVide)))
moveSprite.y++;
//Gauche
if(((v[y1][x2] != numVide) && (v[uy][x2] != numVide))
|| ((v[y2][x2] != numVide) && (v[dy][x2] != numVide)))
moveSprite.x++;
//Droite
else if(((v[y1][x1] != numVide) && (v[uy][x1] != numVide))
|| ((v[y2][x1] != numVide) && (v[dy][x1] != numVide)))
moveSprite.x--;
//Coordonnées des quatre coins
x1 = rect.getPosition().x/32;
y1 = rect.getPosition().y/32;
x2 = (rect.getPosition().x + rect.getSize().x -1)/32;
y2 = (rect.getPosition().y + rect.getSize().y -1)/32;
//Coordonnées des points choisis
ux = (rect.getPosition().x + rect.getSize().x*1/8 -1)/32;
dx = (rect.getPosition().x + rect.getSize().x*7/8 -1)/32;
uy = (rect.getPosition().y + rect.getSize().y*1/8 -1)/32;
dy = (rect.getPosition().y + rect.getSize().y*7/8 -1)/32;
//Bas
if(((v[y2][x1] != numVide) && (v[y2][ux] != numVide))
|| ((v[y2][x2] != numVide) && (v[y2][dx] != numVide)))
moveSprite.y--;
//Haut
else if(((v[y1][x1] != numVide) && (v[y1][ux] != numVide))
|| ((v[y1][x2] != numVide) && (v[y1][dx] != numVide)))
moveSprite.y++;
//Gauche
if(((v[y1][x2] != numVide) && (v[uy][x2] != numVide))
|| ((v[y2][x2] != numVide) && (v[dy][x2] != numVide)))
moveSprite.x++;
//Droite
else if(((v[y1][x1] != numVide) && (v[uy][x1] != numVide))
|| ((v[y2][x1] != numVide) && (v[dy][x1] != numVide)))
moveSprite.x--;
Encore une fois, merci d'avance pour votre attention et aide
Bonne journée