-
Collision
Bonjour a tous j'aurais besoin d'aide sur un problème que je rencontre avec mon jeu de carte que je me suis fait en SDL.
pour expliquer le problème rapidement quand j'arrive avec la souris sur une de mes cartes je regarde s'il y a contact et s'il y en a un je fait monter la carte. Jusque la tout va bien et tout fonctionne. Mon problème survien quand j'arrive sur le coins de ma carte dans le fond en bas ou il y avait normalement la carte et bien elle se met a monter et redescendre et d'après ce que j'ai remarqué le programme n'a pas lair d'etre capable de comprendre la fin de mon if qui est :
if( ( x > sideCards[i]->box.x ) && ( x < sideCards[i+1]->box.x) &&
( y > sideCards[i]-> box.y ) &&
( y < sideCards[i]-> box.y + sideCards[i]->box.h ) )
quand il collisionne la première fois il augmente le box.h pour augmenter la zone ou il est sencé toucher la carte mais comme il n'a pas l'air de comprendre le dernier et de mon if et bien je crois qu'il saute par dessus et exécute comme si la condition était vraie.
Vous êtes mon dernier recours et ca fait une semaine je cherche a comprendre ce bug :S sinon ben je redonnerai mon travail avec ce bug
p.s. mon prof n'a pas réussi a m'aider non plus alors j'essaie de me tourner vers vous si vous avez des sugestion je suis ouvert merci à tous si vous avez lut ce message :) bonne journée
-
Salut
Si j'ai bien compris, ton problème est que lorsque tu survoles la carte avec ta souris, elle se décale vers le haut (pour être mise en valeur) et du coup lorsque tu touches la carte en bas, la souris n'est plus dessus (puisque la carte monte) et la carte redescend par conséquent (puis remonter, etc).
Tu as alors essayé d'augmenter la hauteur pour régler le problème, ce qui est une bonne idée. Mais ça ne marche pas... tu serais pas en mutli thread par hasard ?
Dans ton programme SDL, je suppose que tu as une boucle infinie qui fait le rendu et calcule les collisions. Si tu augmentes la hauteur comme tu dis, es tu bien sûr que cette modification sera bien faite avant que la boucle de détection de collision ne passe dessus ? Dans le même thread ?
Par exemple, essaye de changer la hauteur avant de décaler la carte vers le haut (et de l'abaisser après que la carte soit descendue).
Pour débuguer, je te conseille de dessiner en plus des cartes un cadre rouge de la taille de la zone de collision. Tu pourras l'enlever quand tout fonctionnera. Si le déplacement ou le changement de hauteur est incorrect, tu verras immédiatement comment et dans quelle direction.
-
j'ai retesté avec des SDL_fillbox pour voir jusqua ou le tout s'étendais la box et la box de mon SDL_Rect se rend bien à l'endroit voulu et avec les box rempli je n'ai pas de problème jai seulement remplacé le moment du blit par un fill box donc en théorie c semsé être la même boucle qui s'exécute mais quand c'est ce n'est pas un blit ça fonctionne très bien je me rend a l'endroit désiré en augmentant le heigh de celle-ci. Pour le multi thread je ne peux pas te répondre puisque je ne suis pas vraiment sur de ce que c'est :S lol
Sinon ca me ramène encore a croire sur ma condition qui ne se prend pas corectement mais merci beaucoup en passant du temps que vous avez consacré à me répondre :)
-
Hmm ca ne serait pas un truc du style : il pense que la souris n'est plus sur la carte sélectionnée donc il la redescend, donc il voit qu'il est sur cette carte, donc il la remonte, puis il voit qu'il n'est plus sur la carte sélectionnée donc il la redescend, etc. ?
Jc
-
Salut oui c'est bien le problèeme qui se passe mais quand je l'ai essayé avec le fillRect pour justement voir la zone de détection du rect et bien dans ce temps la ya aucun problème c ca qui me mêle encore plus ya juste quand j'affiche une carte que ca marche pas si c'est juste du noir tout est parfait donc oui c'est ce que tu dit mais juste quand c un image qui est blitté