Rechercher dans la communauté
Affichage des résultats pour les étiquettes 'colision'.
1 résultat trouvé
-
bonjour bonjour ! pour j'ai codé un petit algorithme qui me permet de tester si notre personnage fait face à une image ou non. le tout avec une marge dynamique pour les non-initié à la SDL, la structure SDL_Rect contient les coordonnées : x, y, w et h d'une image. j'ai crois donc qu'il est important de vous le faire partager bool colisionfromage(SDL_Rect lanceur, SDL_Rect recepteur, SDL_Rect curseur, double marge) { double degre, degre2, diff; int difx, dify; difx = (lanceur.x + lanceur.w/2) - (curseur.x + curseur.w/2); //calcul de la difference en pixel dify = (lanceur.y + lanceur.h/2) - (curseur.y + curseur.h/2); //entre le lanceur et le pointeur de la souris degre = atan2(dify, difx);//obtention de l'angle en radian difx = (lanceur.x + lanceur.w/2) - (recepteur.x + recepteur.w/2); //calcul de la difference en pixel entre dify = (lanceur.y + lanceur.h/2) - (recepteur.y + recepteur.h/2); //le lanceur et l'objectif degre2 = atan2(dify, difx);//obtention de l'angle en radian degre *= 57.296;//conversion en degre degre2 *= 57.296; degre += 180; //ajustement pour passer d'un systeme (-180/180) à un systeme (0/360) degre2 += 180; diff = degre-degre2;//calcul de la différence if (diff < 0) //si diff est négatif, on le passe en positif { diff *= -1; } if (diff <= 0 || diff >= marge/2) //si la différence est plus grande que la marge, nous retournons FAUX { return FALSE; } return TRUE; } si vous avez des questions / remarques, comme d'habitude, je vous écoute ! edit : je sais que ce code a un défaut, le calcul de la différence ne marche pas si l'un est <360 et l'autre >0. mais je ne sais pas comment gérer ça simplement. des idées ?
