Partage
  • Partager sur Facebook
  • Partager sur Twitter

Rotation Sprite SFML avec souris

    8 mai 2022 à 20:39:37

    Bonjour a tous !

    Comme expliqué dans le titre, je voudrais faire tourner un sprite grace a la souris 

    Si vous n'avez pas trop compris, voici une image 

    Le sprite est orienté vers la souris 

    La flèche au milieu c'est juste pour montrer la rotation

    Merci pour les réponses et si j'ai mal expliqué dites le moi et je reformulerai

    • Partager sur Facebook
    • Partager sur Twitter
      8 mai 2022 à 20:55:01

      auto p = sf::Vector2f(sf::Mouse::getPosition().x - sprite.getPosition().x, sf::Mouse::getPosition().y - sprite.getPosition().y);
      sprite.setRotation(std::atan2(p.y, p.x));

      -
      Edité par JadeSalina 8 mai 2022 à 20:55:08

      • Partager sur Facebook
      • Partager sur Twitter
        9 mai 2022 à 18:07:07

        Ca ne marche pas quand je tourne la souris, ca tourne presque pas
        • Partager sur Facebook
        • Partager sur Twitter
          9 mai 2022 à 18:15:37

          Vous travaillez en degré ou en radian ?
          • Partager sur Facebook
          • Partager sur Twitter
          Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
            9 mai 2022 à 18:20:46

            En degrés

            (pour préciser je ne suis qu'n 5ème, je n'ai donc pas encore vu les radians mais les degrés oui)

            • Partager sur Facebook
            • Partager sur Twitter
              9 mai 2022 à 18:38:12

              Salut,

              setrotation attend des degrés, et atan2 renvoie des radians.

              Pour reprendre la formule de jadesalina :

              sprite.setRotation((180.0/3.14159)*std::atan2(p.y, p.x));



              • Partager sur Facebook
              • Partager sur Twitter

              Recueil de code C et C++  http://fvirtman.free.fr/recueil/index.html

                9 mai 2022 à 18:45:14

                @Fvirtman j'ai remplacé avec ton bout de code mais genre en fait je voudrais que le sprite tourne et qu'il reste sur place, car la quand je déplace la souris, le sprite se met a tourner, si tu ne comprends pas, je peux mettre une vidéo
                • Partager sur Facebook
                • Partager sur Twitter
                  9 mai 2022 à 18:50:21

                  Normalement, grâce a ce code, le sprite tourne et regarde toujours la souris, c'est le cas ?

                  • Partager sur Facebook
                  • Partager sur Twitter

                  Recueil de code C et C++  http://fvirtman.free.fr/recueil/index.html

                    9 mai 2022 à 18:52:52

                    oui, il regarde toujours la souris, mais en fait je voudrais qu'il la regarde et en même temps qu'il reste sur place (qu'il fasse une rotation sur lui-même)
                    • Partager sur Facebook
                    • Partager sur Twitter
                      9 mai 2022 à 18:59:05

                      Il faut une rotation autour de son point d'ancrage ? En haut à gauche ?
                      • Partager sur Facebook
                      • Partager sur Twitter

                      Recueil de code C et C++  http://fvirtman.free.fr/recueil/index.html

                        9 mai 2022 à 19:01:06

                        Je pense que "l'origine" du sprite n'est pas au centre du sprite.

                        Je ne connais pas SFML mais beaucoup de librairies graphique mettent, par défaut, l'origine du sprite dans un des coins du sprites et donc fait une rotation "autour" de cette origine et non au "centre" du sprite.

                        Pouvez-vous vérifier les suppositions avec la documentation de la SFML ?

                        EDIT:

                        Bingo !

                        https://www.sfml-dev.org/tutorials/2.0/graphics-transform-fr.php

                        -
                        Edité par bacelar 9 mai 2022 à 19:03:43

                        • Partager sur Facebook
                        • Partager sur Twitter
                        Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
                          9 mai 2022 à 19:03:06

                          je vous envoie un exemple de jeu vidéo pour vous montrer comment j'aimerais que ca fasse (lancez une partie juste pour voir comment ca fait)

                          https://zombsroyale.io/

                          • Partager sur Facebook
                          • Partager sur Twitter
                            9 mai 2022 à 19:07:13

                            Je crois qu'on voit où tu veux aller. :-)

                            Juste, faut mettre l'origine du sprite au "bon" endroit.

                            • Partager sur Facebook
                            • Partager sur Twitter
                            Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
                              9 mai 2022 à 19:07:22

                              je vais essayer avec la doc

                               EDIT:

                              en fait, je rencontre un autre problème, je ne sais pas comment mettre l'origine du sprite au centre de celui-ci

                              -
                              Edité par MathiasRubert 9 mai 2022 à 19:30:41

                              • Partager sur Facebook
                              • Partager sur Twitter
                                10 mai 2022 à 14:25:40

                                @MathiasRubert

                                Bonjour,

                                Lis bien la doc. Il y a un tuto disponible en français. Regarde sur cette page :

                                https://www.sfml-dev.org/tutorials/2.5/graphics-transform-fr.php

                                "Origine

                                L'origine est le centre des trois autres transformations. La position est la position de l'origine, la rotation est effectuée autour de l'origine, et l'échelle est appliquée autour de l'origine également. Par défaut, l'origine est le coin haut-gauche de l'entité (son point (0, 0)), mais vous pouvez la modifier de sorte qu'elle soit le centre ou un autre coin, par exemple.

                                Afin que l'API reste simple, il n'y a qu'une origine pour les trois composantes de transformation. Ce qui signifie que vous ne pouvez pas, par exemple, positionner une entité relativement à son coin haut-gauche tout en la tournant autour de son centre. Si vous avez réellement besoin de faire ce genre de choses, jetez un oeil aux chapitres suivants.

                                // 'entity' peut être un sf::Sprite, un sf::Text, un sf::Shape ou n'importe quelle autre classe transformable
                                
                                // change l'origine de l'entité
                                entity.setOrigin(10.f, 20.f);
                                
                                // récupère l'origine de l'entité
                                sf::Vector2f origin = entity.getOrigin(); // = (10, 20)

                                Notez que le fait de changer l'origine modifie également la position de l'entité à l'écran, bien que sa propriété 'position' soit toujours la même. Si vous ne comprenez pas pourquoi, relisez ce tutoriel ! "

                                -
                                Edité par Umbre37 10 mai 2022 à 14:28:20

                                • Partager sur Facebook
                                • Partager sur Twitter
                                  10 mai 2022 à 17:53:35

                                  ca marche, MERCI BEAUCOUP !!
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    10 mai 2022 à 19:42:27

                                    Umbre37 a écrit:

                                    @MathiasRubert

                                    Bonjour,

                                    Lis bien la doc. Il y a un tuto disponible en français. Regarde sur cette page :

                                    https://www.sfml-dev.org/tutorials/2.5/graphics-transform-fr.php

                                    "Origine

                                    L'origine est le centre des trois autres transformations. La position est la position de l'origine, la rotation est effectuée autour de l'origine, et l'échelle est appliquée autour de l'origine également. Par défaut, l'origine est le coin haut-gauche de l'entité (son point (0, 0)), mais vous pouvez la modifier de sorte qu'elle soit le centre ou un autre coin, par exemple.

                                    Afin que l'API reste simple, il n'y a qu'une origine pour les trois composantes de transformation. Ce qui signifie que vous ne pouvez pas, par exemple, positionner une entité relativement à son coin haut-gauche tout en la tournant autour de son centre. Si vous avez réellement besoin de faire ce genre de choses, jetez un oeil aux chapitres suivants.

                                    // 'entity' peut être un sf::Sprite, un sf::Text, un sf::Shape ou n'importe quelle autre classe transformable
                                    
                                    // change l'origine de l'entité
                                    entity.setOrigin(10.f, 20.f);
                                    
                                    // récupère l'origine de l'entité
                                    sf::Vector2f origin = entity.getOrigin(); // = (10, 20)

                                    Notez que le fait de changer l'origine modifie également la position de l'entité à l'écran, bien que sa propriété 'position' soit toujours la même. Si vous ne comprenez pas pourquoi, relisez ce tutoriel ! "

                                    -
                                    Edité par Umbre37 il y a environ 5 heures


                                    En effet, en mettant l'origine au milieu, on résout le soucis :) 

                                    Au pire, même si la fonction n'avait pas existé, une soustraction sur x et une autre sur y aurait fait la même chose :)

                                    Cependant, je rebondis la dessus, car on a la le concept de "point chaud" d'un sprite, le point autour duquel le sprite se dessine.

                                    C'est très intéressant quand on a des sprites ou chaque image peut être de taille très différente :) 

                                    Puisque je ne retrouve plus mon vieux tuto ici, voici un lien vers une copie sur un autre site :

                                    https://jeux.developpez.com/tutoriels/theorie-des-collisions/sprites-enrichis/#LIII-A

                                    -
                                    Edité par Fvirtman 10 mai 2022 à 19:42:39

                                    • Partager sur Facebook
                                    • Partager sur Twitter

                                    Recueil de code C et C++  http://fvirtman.free.fr/recueil/index.html

                                    Rotation Sprite SFML avec souris

                                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                    • Editeur
                                    • Markdown