Forum de la communauté SFML

Aide => Graphique => Discussion démarrée par: MyPix le Juillet 01, 2015, 09:01:40 pm

Titre: Problème avec une rotation
Posté par: MyPix le Juillet 01, 2015, 09:01:40 pm
Bonjour !
J'essaie de faire une classe de bouton hérité de drawable, cependant ma fonction update de mon bouton me pose des soucis, car je dois garder le texte à l'intérieur du bouton peut importe la rotation, et je ne comprend pas ce qui ne va pas :
http://pastebin.com/pCBcAKsR
La fonction intéréssante est Update()
        void update()
                        {


                                button_text.setOrigin(button_text.getGlobalBounds().width / 2,button_text.getGlobalBounds().height/2);//center origin
                                button_shape.setOrigin(button_shape.getLocalBounds().width / 2, button_shape.getLocalBounds().height/2); // "  "
                               

                                button_shape.setPosition(getPosition());
                                button_shape.setScale(getScale());
                                button_shape.setRotation(getRotation());

                                button_text.setPosition(button_shape.getPosition());
                                button_text.setRotation(getRotation());
                                button_text.setScale(getScale());
                               
                                cout << "************" << endl;
                                cout << "POS[" << button_shape.getPosition().x << ";" << button_shape.getPosition().y << "];" << endl;
                                cout << "SIZE[" << button_shape.getSize().x << ";" << button_shape.getSize().y << "];" << endl;
                                cout << "************" << endl;
                               
                        }
(avec un petit cout<< pour afficher des info pour débug ^^)

Mais elle ne marche pas, je ne comprend pas, je centre les origines et apres ça devrait aller tout seul non?
Voici un résultat:
http://prntscr.com/7nn4dl
Et avec une rotation,encore pire.
http://prntscr.com/7nn4m3
http://prntscr.com/7nn4qi

Titre: Re : Problème avec une rotation
Posté par: G. le Juillet 01, 2015, 09:09:48 pm
T'as utilisé getGlobalBounds au lieu de getLocalBounds je pense.
Titre: Re : Problème avec une rotation
Posté par: MyPix le Juillet 01, 2015, 10:08:40 pm
button_text.setOrigin(button_text.getLocalBounds().width / 2,button_text.getLocalBounds().height*4.3);//center origin
                                button_shape.setOrigin(button_shape.getLocalBounds().width / 2, button_shape.getLocalBounds().height/2); // "  "

Avec ça, ça marche très bien merci :3
Titre: Re : Problème avec une rotation
Posté par: MyPix le Juillet 02, 2015, 06:07:52 pm
Re
Apres tests, ça marche très bien cette formule..pour une taille de police 16, si l'utilisateur veut changer ça le placement est fichu, je ne trouve pas de formule pour obtenir une valeur correcte et commune :(
Titre: Re : Problème avec une rotation
Posté par: Laurent le Juillet 02, 2015, 06:19:15 pm
C'est quoi ce 4.3 ?

Sinon, il faut prendre en compte left et top pour le rectangle englobant, ils ne valent pas zéro dans le cas de sf::Text.
Titre: Re : Problème avec une rotation
Posté par: MyPix le Juillet 02, 2015, 06:31:07 pm
4.3 c'était une valeur qui marchais pour l fontsize = 16.
Et Left/top c'est quoi?
Titre: Re : Problème avec une rotation
Posté par: Laurent le Juillet 02, 2015, 06:43:25 pm
Citer
Et Left/top c'est quoi?
http://www.sfml-dev.org/documentation/2.3-fr/classsf_1_1Rect.php#pub-attribs
Titre: Re : Problème avec une rotation
Posté par: MyPix le Juillet 02, 2015, 06:49:49 pm
Oui mais je pense pas que ce me soit super utile ou alors j'ai mal compris ^^
Je veux juste positionner mon Sf::Text au milieu de mon sf::Rectangle ^^
Titre: Re : Problème avec une rotation
Posté par: Laurent le Juillet 03, 2015, 09:27:08 am
Le milieu d'un rectangle, c'est (left + width / 2, top + height / 2). Si tu ne vois pas, fais un petit dessin, sur lequel le rectangle n'est pas positionné en (0, 0).
Titre: Re : Problème avec une rotation
Posté par: MyPix le Juillet 12, 2015, 11:46:02 am
Re, désolé de l'inactivitées j'avais fait une pause dans le projet ^^
button_text.setOrigin((button_text.getLocalBounds().left + button_text.getLocalBounds().width) / 2, (button_text.getLocalBounds().top + button_text.getLocalBounds().height) / 2);//center origin
                                button_shape.setOrigin((button_shape.getLocalBounds().left + button_shape.getLocalBounds().width) / 2, (button_shape.getLocalBounds().top + button_shape.getLocalBounds().height)/2); // "  "
Ceci me donne:
http://prntscr.com/7rq8a9
Titre: Re : Problème avec une rotation
Posté par: Laurent le Juillet 12, 2015, 12:08:36 pm
Ta formule est mauvaise, retire les parenthèses.
Titre: Re : Problème avec une rotation
Posté par: MyPix le Juillet 12, 2015, 12:26:45 pm
Oh, miracle ! Merci :)