Bonjour, j'ai essayer plusieurs chose pour résoudre mon problème mais les collisions de mes deux texture, que j'ai nommé rect et rectP1 ne fonctionne pas correctement, ou pour être plus précis, je n'arrive à faire fonctionner que un coté à la fois, sa dépend quel "if" je mais en premier.
Si je mais en premier le "if" qui détecte si le coté droit de mon personnage (rect) à toucher le coté gauche de l'obstacle (rectP1) et en deuxième un "else if" qui fait l'inverse, donc qui détecte si le coté gauche de mon personnage à toucher le coté droit de l'obstacle, quand le coté droit de mon personnage va toucher le coté gauche de l'obstacle, sa va me téléporter le personnage juste à coté du coté gauche de l'obstacle, donc pour l'instant tous fonctionne bien, mais si le coté gauche du personnage touche le coté droit de l'obstacle, au lieu de me le téléporter à coté du coté droit de l'obstacle, sa va le téléporter à coté du coté gauche de l'obstacle, et si j'inverse le if et le else if, sa va me faire l'inverse (je sais pas si j'ai très bien expliquer).
Voici la partie du code qui fait fonctionner les collisions, je pense pas qu'il y est besoin du reste du code :
Ce code affecte le contenu de la variable rectP1G à rectD.
if(rectD = rectP1G)
Ce code affecte le contenu de la variable rectP1G à rectD, et évalue ce contenu dans le cadre du test if, et si ce contenu est différent de 0, le test passe (0 signifie "faux" et toute autre valeur signifie "vrai").
Donc, si rectP1G contient autre chose que 0, ce test sera toujours évalué à "vrai" et le code qui suit entre les accolades sera exécuté.
Problème résolu, enfaite le problème venais que avant je m'était = au lieu de ==, mais aussi le problème venais surtout du fait que je créais mes variable dans la condition
ce qui faisais que, pour une raison que j'ignore, mon personnage traversais l'obstacle.
Merci pour votre aide et est ce que quelqu'un peut m'expliquer pourquoi crée des variable dans cette condition faisait que les autres condition contenant == qui était à l'intérieur de cette condition ne fonctionnais pas mais que celle contenant = fonctionnait?
faisait que mon personnage traversais l'obstacle. La différence entre = et == je la connais, si au début je mettais = au lieu de == c'étais car == me faisais traverser l'obstacle alors que = bloquais bien mon personnage, donc même si c'était pas logique vu que sa bloquais mon personnage j'y avais laisser comme sa, mais j'avoue que j'avais oublier que 0 signifiait faux et 1 vrai en informatique. Et désoler pour les fautes d'orthographes.
Les variables que tu as créée dans le bloc de la condition que tu présentes, qu'elles soient déclarées en dehors ou à l’intérieur du bloc ne change rien ! Tu as du modifier autre chose dans tes expérimentations. Mais comme on ne voit pas le code, on ne peut t'en dire plus.
....si au début je mettais = au lieu de == c'étais car == me faisais traverser l'obstacle alors que = bloquais bien mon personnage, donc même si c'était pas logique vu que sa bloquais mon personnage ....
Quand je lis ça (et d'autres commentaires dans ton post précédent), je me dis que tu ne sais absolument pas ce que tu fais.
- Edité par edgarjacobs 4 juillet 2023 à 20:49:25
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
En ayant regardé ton code d'un peu plus prés les actions que tu apportes dans tes conditions affecte la même la valeur que le personnage a déjà. Donc ne change rien. Si chez toi elle change c'est dans une partie du code que tu ne montre pas !
J'ai intégré ton code dans un fichier source pour vérifier : (j'ai un peu renommé les variables pour m'y retrouver)
#include <stdio.h>
typedef struct
{
int x;
int w;
} Rect;
int main(void)
{
Rect obstacle = {20, 10};
Rect personnage = {10, 10};
if(1) // if(SDL_HasIntersection(&rect, &rectP1) == SDL_TRUE)
{
int obstacleG = obstacle.x;
int obstacleD = obstacle.x + obstacle.w;
int personnageG = personnage.x;
int personnageD = personnage.x + personnage.w;
if(personnageD == obstacleG)
{
personnage.x = obstacleG - personnage.w;
puts("Personnage touche a droite");
}
else if(personnageG == obstacleD)
{
personnage.x = obstacleD;
puts("Personnage touche a gauche");
}
printf("Personnage x : %d", personnage.x);
}
return 0;
}
J'ai vérifier plusieurs fois et quand je crée les variables dans cette condition mon personnage traverse l'obstacle mais quand je crée juste les variables autre par dans le code et que je ne change rien d'autre, les collision fonctionne bien.
Et est ce que, au passage, quelqu'un peut me dire pourquoi
if(rectB == rectP1H)
ne fonctionne pas car je ne vois pas pourquoi sa ne fonctionne pas.
Et je sais que c'est le bazar dans mon code mais je créerais d'autre fonctions pour que le code sois plus propre quand j'aurais réussi à faire fonctionner certaine chose dont je veux m'occuper d'abord dans mon programme (les collisions en font partie).
edit : j'ai réussi à faire fonctionner la condition
if(rectB == rectP1H)
en modifiant le == en <= mais maintenant c'est le résultat de la condition,
rect.y = rectP1H + rect.h;
qui ne veut pas fonctionner
- Edité par MorgadPrudhon 5 juillet 2023 à 0:07:01
J'ai vérifier plusieurs fois et quand je crée les variables dans cette condition mon personnage traverse l'obstacle mais quand je crée juste les variables autre par dans le code et que je ne change rien d'autre, les collision fonctionne bien.
Et est ce que, au passage, quelqu'un peut me dire pourquoi
Et bien quand tu les définies là où on les voit dans ton code et ou tu les utilises dans ton bloc if(SDL_HasIntersection... le personnage c'est déplacé entre temps.
Si tu peine à suivre le déroulement de ton code tu peux utiliser un débogueur.
Aussi, active les Warnings, ça te donneras des indices sur les erreurs que tu as pu faire. (il y en a quelques une).
Que font ces includes de fichiers entête C++ dans ton code ? Tu compiles en C++ ?
Non je ne compile pas en C++ mais à chaque fois j'oubli les quel ils faut enlever et comme sa na pas l'air de causer de problème je prend pas le temps d'aller regarder les quels il faut enlever.
edit : Pour la condition
if(rectB <= rectP1H)
qui avant était
if(rectB == rectP1H)
c'est bon j'ai réussi à tous faire fonctionner correctement, maintenant mon personnage peut aller sur l'obstacle.
- Edité par MorgadPrudhon 5 juillet 2023 à 1:13:18
Ça dépend des compilateurs, sur gcc, il faut mettre au minimum les options de compilation -Wall et -Wextra
MorgadPrudhon a écrit:
Non je ne compile pas en C++ mais à chaque fois j'oubli les quel ils faut enlever et comme sa na pas l'air de causer de problème je prend pas le temps d'aller regarder les quels il faut enlever.
Et si, sinon ça poserait problème, la compilation échouerait !
- Edité par rouIoude 5 juillet 2023 à 10:37:52
...
problème de colision SDL2
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Ceci est une affectation !
Le Tout est souvent plus grand que la somme de ses parties.
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
Et pour dans la condition