Partage
  • Partager sur Facebook
  • Partager sur Twitter

[sfml] Conversions de coordonnées avec le view

Sujet résolu
    4 janvier 2008 à 14:09:11

    Salut.
    Voila, ça fait un bon boût de temps (environs 7 heures) que j'éssaye de faire correspondre les coordonnées du curseur de la souris en utilisant un view (vue) mais sans résultats.
    si quelqu'un sais un truc sur ces fameuses conversions ou connait un lieu où je peux apprendre plus sur elles serait le bienvenu.
    Merci.
    • Partager sur Facebook
    • Partager sur Twitter

    La maîtrise des fondamentaux est le fondamental de la Maîtrise.

      4 janvier 2008 à 14:21:00

      J'avais essayé un truc comme ça, c'est vrai que ça serait très pratique dans certains cas... si ta caméra est fixe et dans un plan parallèle à l'un des axes, tu peux peut-être trouver une relation (et encore !), mais sinon, je ne pense pas que ça soit possible... l'idéal est d'utiliser une autre bibliothèque pour gérer la souris, sous Windows tu peux utiliser la fonction GetCursorPos de l'API win et si tu es en plein écran tu pourra facilement exploiter ces coordonnées. Je dis en plein écran car autrement il te faut aussi récupérer les coordonnées de ta fenêtre pour savoir où se situe la souris dans la fenêtre... Voilà ! Bonne chance à toi !

      Edit : En fait, je ne connais pas la SFML... je ne sais pas si ce que je t'ai dit est valable ^^
      • Partager sur Facebook
      • Partager sur Twitter
      Anonyme
        4 janvier 2008 à 14:33:12

        Je suis pas sur d'aoir compris : tu veux faire déplacer la vue en fonction du déplacement de la souris? Alors : http://sfml.sourceforge.net/documentation/classsf_1_1View.htm & http://sfml.sourceforge.net/documentation/classsf_1_1Event.htm .

        Lors d'un déplacement de la souris, tu récupères les coordonées de la souris, et tu modifies Top et Left du sf::View. Enfin, je crois.
        • Partager sur Facebook
        • Partager sur Twitter
          4 janvier 2008 à 14:43:33

          C'est assez simple en fait, étant donné qu'un rectangle de vue n'est qu'un déplacement et/ou agrandissement par rapport au rectangle de la fenêtre.

          Je n'ai pas de code sous la main, mais une soustraction suivie d'une division devrait être suffisant ;)

          Quant à utiliser GetCursorPos, ça ne changerait rien étant donné que cela renverrait les mêmes coordonnées que celles renvoyées par SFML.

          Ceci-dit, une fonction de conversion devrait être intégrée à SFML d'ici peu, c'est vrai que ce sera nettement plus pratique ;)
          • Partager sur Facebook
          • Partager sur Twitter
            4 janvier 2008 à 17:45:46

            Voila, le problème est résolu.
            Merci.
            • Partager sur Facebook
            • Partager sur Twitter

            La maîtrise des fondamentaux est le fondamental de la Maîtrise.

              5 janvier 2008 à 3:24:07

              Est-ce que tu pourrais partager ton code ? Cela pourrait en intéresser d'autres.
              • Partager sur Facebook
              • Partager sur Twitter
                5 janvier 2008 à 16:05:32

                Citation : Laurent Gomilla

                Est-ce que tu pourrais partager ton code ? Cela pourrait en intéresser d'autres.


                Ok, le voilà, mais ce n'est pas ce que tu m'as donné sur le forum de la sfml Laurent Gaumilla ;) , j'ai du faire tourner un peu ma tête, mais le voila, c'est une simple addition de rien dutout :lol:
                1. if(spr_curseur.GetLeft() > view.Left + (view.Width - 32))
                2.     view.Left += 5;
                3. if(spr_curseur.GetLeft() < view.Left + 32)
                4.      view.Left -= 5;
                5. if(spr_curseur.GetTop() > view.Top + (view.Height - 32))
                6.      view.Top += 5;
                7. if(spr_curseur.GetTop() < view.Top + 32)
                8.      view.Top -= 5;
                9. //La vue ne dépasse pas le background. (spr_back c'est le background)
                10. if(view.Top + view.Height > spr_back.GetHeight()  )
                11.      view.Top = spr_back.GetHeight() - view.Height - 1;
                12. if(view.Top < spr_back.GetTop() )
                13.      view.Top = spr_back.GetTop() + 1;
                14. if(view.Left + view.Width > spr_back.GetWidth()  )
                15.      view.Left = spr_back.GetWidth() - view.Width - 1;
                16. if(view.Left < spr_back.GetLeft() )
                17.      view.Left = spr_back.GetLeft() + 1;

                Et voilà, bien cuit et bien servi pour ceux qui ont la tête un peu dans les nuages quand ils codent ;)
                Et ça marche aussi bien en mode fenêtré qu'en mode plein écran, le seul truc est de toujour mettre la taille du view la même que la résolution de l'écran ;) .
                • Partager sur Facebook
                • Partager sur Twitter

                La maîtrise des fondamentaux est le fondamental de la Maîtrise.

                [sfml] Conversions de coordonnées avec le view

                × 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.
                • Editeur
                • Markdown