Bienvenue, Invité. Merci de vous connecter ou de vous inscrire.
Avez-vous perdu votre e-mail d'activation ?

Auteur Sujet: [RESOLU]sf::Rect<int> contains() bug  (Lu 2478 fois)

0 Membres et 1 Invité sur ce sujet

Barbeuk

  • Newbie
  • *
  • Messages: 4
    • Voir le profil
[RESOLU]sf::Rect<int> contains() bug
« le: Août 23, 2013, 12:06:36 pm »
Bonjour, je viens vous faire part d'un problème auquel je ne trouve aucune solution...

J'envoie un point à la fonction contains(); de sf::Rect, le point est bel est bien en dehors du rectangle et malgré ça la fonction renvoie true...
Le point est en fait la position de la souris, coordonnées (655, 314). Et le rect concerné: left 400, top 300, width 430, height 330.

J'utilise Visual studio et sfml 2.0 (il me semble que c'est la version qui était encore en beta et qui n'était pas distribuée directement pour mon compiler (j'ai du utiliser cmake)).
Petite preuve à l'appui:


Merci d'avance pour votre aide.
« Modifié: Août 23, 2013, 02:06:01 pm par Barbeuk »

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : sf::Rect<int> contains() bug
« Réponse #1 le: Août 23, 2013, 12:19:23 pm »
Tu devrais tester avec SFML 2.1, le code de cette fonction a changé.
Laurent Gomila - SFML developer

Barbeuk

  • Newbie
  • *
  • Messages: 4
    • Voir le profil
Re : sf::Rect<int> contains() bug
« Réponse #2 le: Août 23, 2013, 12:31:09 pm »
Ok c'est ce que je vais faire. Merci pour cette réponse rapide. Je vous tiens au courant du résultat.

EDIT: (foutu déco je dois tout retaper....)
Bref j'ai pris Visual C++ 11 (2012) - 32 bits, changé les chemins du projet include/lib, nettoyé la solution puis régénéré.
Visual me fait d'abord un caca nerveux comme quoi je devais mettre la bibliothèque runtime de /MTd à /MDb ?!
Bon ok, ça compile enfin et me sort plein de warning concernant des fichiers .pdb non trouvé pour la sfml. Pas grave je lance le débogage et là pareil... contains renvoi true même si le point n'est pas dans le rectangle. En fait il renvoi true tant que souris.x > rect.left && souris.y > rect.top ...
Je devrais essayer de prendre le code source et utiliser cmake pour voir? Déjà j'aurais les .pdb qui seront générés.

PS: je compile en static, petite info en plus, on sait jamais...
« Modifié: Août 23, 2013, 01:05:54 pm par Barbeuk »

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : sf::Rect<int> contains() bug
« Réponse #3 le: Août 23, 2013, 01:29:23 pm »
Mais attend... le point est bien dans le rectangle là. Tu es sûr que tu ne confonds pas width/height avec right/bottom ?
Laurent Gomila - SFML developer

mccusti

  • Invité
Re : sf::Rect<int> contains() bug
« Réponse #4 le: Août 23, 2013, 01:33:20 pm »
Citer
Le point est en fait la position de la souris, coordonnées (655, 314). Et le rect concerné: left 400, top 300, width 430, height 330.
Pour moi le comportement est normal. Le bord gauche est à 400, le bord droit à 400+430=830, et on a bien 400<655<830. Ensuite pour l'axe vertical, le côté supérieur est à 300 et le côté inférieur à 300+330=630 (ne pas oublier que l'axe y est orienté vers le bas). Le point vérifie bien 300<314<630.

Barbeuk

  • Newbie
  • *
  • Messages: 4
    • Voir le profil
Re : sf::Rect<int> contains() bug
« Réponse #5 le: Août 23, 2013, 01:53:30 pm »
En effet, en regardant le code de la sfml... Mais bon, ce n'est pas sensé représenter un carré de 30 de côté dans mon cas? Avec comme position x: 400 y:300? A moins que je n'ai tout simplement pas saisie le concept de Rect....

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : sf::Rect<int> contains() bug
« Réponse #6 le: Août 23, 2013, 01:57:33 pm »
Citer
Mais bon, ce n'est pas sensé représenter un carré de 30 de côté dans mon cas?
Ben non, si width/height vaut 430/330 alors ton rectangle fait 430x330.

Si tu veux un rectangle de 30x30 alors déclare-le avec une taille de 30x30 :
sf::IntRect rect(400, 300, 30, 30);
Laurent Gomila - SFML developer

Barbeuk

  • Newbie
  • *
  • Messages: 4
    • Voir le profil
Re : sf::Rect<int> contains() bug
« Réponse #7 le: Août 23, 2013, 02:05:36 pm »
Tu as été plus rapide, viens juste de comprendre... Quel andouille  :-X je me suis encore compliqué la vie pour rien...

Merci à vous deux !