-
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
-
T'as utilisé getGlobalBounds au lieu de getLocalBounds je pense.
-
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
-
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 :(
-
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.
-
4.3 c'était une valeur qui marchais pour l fontsize = 16.
Et Left/top c'est quoi?
-
Et Left/top c'est quoi?
http://www.sfml-dev.org/documentation/2.3-fr/classsf_1_1Rect.php#pub-attribs
-
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 ^^
-
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).
-
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
-
Ta formule est mauvaise, retire les parenthèses.
-
Oh, miracle ! Merci :)