Partage
  • Partager sur Facebook
  • Partager sur Twitter

SFML: probleme avec souris

position

    3 janvier 2008 à 11:14:32

    Bonjour,
    Voila mon problème : j'ai voulu coller la position de mon sprite sur celle de ma souris mais il y a un décallage très important . voila comment j'ai procédé :
    1. if(Event.Type == sf::Event::MouseMove)
    2.                 Raquette.SetTop(input.GetMouseY() -(Raquette.GetWidth()/2));
    3.                 Raquette.SetLeft(input.GetMouseX()- (Raquette.GetHeight()/2));


    pourquoi cela ne marche t-il pas ??


    • Partager sur Facebook
    • Partager sur Twitter
      3 janvier 2008 à 13:18:24

      salut
      essaie plutôt ça;

      1. if(Event.Type == sf::Event::MouseMove)
      2. {
      3.   Raquette.SetTop(Event.Mouse.Y-(Raquette.GetWidth()/2));
      4.   Raquette.SetLeft(Event.Mouse.X-(Raquette.GetHeight()/2));
      5. }


      Regardes bien ce tuto :) .

      ++
      • Partager sur Facebook
      • Partager sur Twitter
      Anonyme
        3 janvier 2008 à 13:58:54

        Culte, tu proposes en fait la même chose, mais d'une autre manière.

        Je pense que le problème vient du fait que ta raquette n'est pas un carré : si tu inverses GetWidth avec GetHeight ça devrait arranger le problème.

        1. if(Event.Type == sf::Event::MouseMove)
        2. {
        3.     Raquette.SetTop(Event.Mouse.Y - (Raquette.GetHeight()/2));
        4.     Raquette.SetLeft(Event.Mouse.X - (Raquette.GetWidth()/2));
        5. }
        • Partager sur Facebook
        • Partager sur Twitter
          3 janvier 2008 à 14:09:52

          merci de votre aide ! mais malgré vos conseils j'ai toujours un léger décalage entre ma souris et ma raquette ... elle ne parvient pas a atteindre les bords de la fenetre !

          • Partager sur Facebook
          • Partager sur Twitter
          Anonyme
            3 janvier 2008 à 14:43:36

            Montre voir le code minimal.
            • Partager sur Facebook
            • Partager sur Twitter
              3 janvier 2008 à 14:57:41

              Bonjour !

              Y a t-il une zone transparente tout autour de ton image de raquette ?
              Si oui regarde du coté du pixel perfect !
              • Partager sur Facebook
              • Partager sur Twitter
              Inkamath on GitHub - Interpréteur d'expressions mathématiques. Reprise du développement en cours.
              Anonyme
                3 janvier 2008 à 15:11:43

                Salut.

                Je ne suis pas trop sûr d'avoir bien compris ta demande :(

                Mais tu veux dire que: tu blittes le milleu d'une image à la position de la souris.
                Je trouve cela normal que ton image n'atteigne pas les bords de ta fenêtre, car quand tu demandes la position de la souris à SFML, elle te répond la position de la souris dans la fenêtre.
                Puis, quand la souris sort de la fenêtre, SFML te donne pas la position de la souris en dehors de la fenêtre mais la dernière position qui était encore dans la fenêtre.

                En effet, essaie de définir le nombre de FPS à 10, tu verra que quand tu fais sortir la souris de ton écran, ton image sera blittée assez loin du rebord de la fenêtre. Au contraire si, tu mets le FPS à 800, la dernière image sera très près de la fenêtre. Pour que ton truc fonctionne, il faudrait que le nombre de FPS soit à infini :-° Cela dépend biensure aussi de la vitesse de la souris.

                La solution à ton problème( une solution portable), c'est de définir une booléenne qui regarde si la souris est dans ta fenêtre. SFML te donnes une fonction qui te permet cela.
                Ensuite, tu blittes normalement l'image à la position de la souris tant qu'elle est dans la fenêtre.
                Puis, dès qu'elle sort de la fenêtre, tu fais coller ton image au bord de ta fenêtre. Tu peut aussi la faire sortir de ta fenêtre. Ca c'est selon ce que tu veux faire.

                Mais la solution optimale reste de définir ,grâce à sf::Clock et à l'enregistrement dans 2 variables de la position de la souris,la vitesse de la souris. puis, quand tu vois que la souris sort de la fenêtre, tu reprends la dernière position de la souris et tu l'avance de D pixels par secondes qui est en rapport avec la dernière vitesse de la souris enregistrée. :o


                J'éspère que j'ai été claire.

                Bye :)
                • Partager sur Facebook
                • Partager sur Twitter
                  3 janvier 2008 à 18:10:54

                  Citation : fred1270

                  Salut.

                  Je ne suis pas trop sûr d'avoir bien compris ta demande :(

                  Mais tu veux dire que: tu blittes le milleu d'une image à la position de la souris.
                  Je trouve cela normal que ton image n'atteigne pas les bords de ta fenêtre, car quand tu demandes la position de la souris à SFML, elle te répond la position de la souris dans la fenêtre.
                  Puis, quand la souris sort de la fenêtre, SFML te donne pas la position de la souris en dehors de la fenêtre mais la dernière position qui était encore dans la fenêtre.

                  En effet, essaie de définir le nombre de FPS à 10, tu verra que quand tu fais sortir la souris de ton écran, ton image sera blittée assez loin du rebord de la fenêtre. Au contraire si, tu mets le FPS à 800, la dernière image sera très près de la fenêtre. Pour que ton truc fonctionne, il faudrait que le nombre de FPS soit à infini :-° Cela dépend biensure aussi de la vitesse de la souris.

                  La solution à ton problème( une solution portable), c'est de définir une booléenne qui regarde si la souris est dans ta fenêtre. SFML te donnes une fonction qui te permet cela.
                  Ensuite, tu blittes normalement l'image à la position de la souris tant qu'elle est dans la fenêtre.
                  Puis, dès qu'elle sort de la fenêtre, tu fais coller ton image au bord de ta fenêtre. Tu peut aussi la faire sortir de ta fenêtre. Ca c'est selon ce que tu veux faire.

                  Mais la solution optimale reste de définir ,grâce à sf::Clock et à l'enregistrement dans 2 variables de la position de la souris,la vitesse de la souris. puis, quand tu vois que la souris sort de la fenêtre, tu reprends la dernière position de la souris et tu l'avance de D pixels par secondes qui est en rapport avec la dernière vitesse de la souris enregistrée. :o


                  J'éspère que j'ai été claire.

                  Bye :)


                  Voila une explication déroutante ! Quant à la fonction qui me permet de savoir si la souris est dans la fenetre , j'ai cherché dans la doc mais je ne suis pas sur de l'avoir trouvé .... merci beaucoup tout de meme je pense que je vais enfin avancer le shmillblick
                  • Partager sur Facebook
                  • Partager sur Twitter
                  Anonyme
                    3 janvier 2008 à 18:38:50

                    Ouille, je vais regarder un peu dans mes dossiers, voir comment elle s'appelle ^^ .
                    • Partager sur Facebook
                    • Partager sur Twitter
                    Anonyme
                      4 janvier 2008 à 11:34:23

                      J'ai retrouvé mon projet où j'avais utilisé cette fonctionnalité. Malheureusement c'est une fonction SDL =( .
                      • Partager sur Facebook
                      • Partager sur Twitter
                        4 janvier 2008 à 11:50:21

                        MDR c'est bien ce que je me disais .... enfin bon je peux le faire manuellement j'imagine lol
                        • Partager sur Facebook
                        • Partager sur Twitter

                        SFML: probleme avec souris

                        × 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