Forum de la communauté SFML

Aide => Graphique => Discussion démarrée par: Sylvie-C le Juillet 23, 2016, 06:07:37 pm

Titre: fonction wrap
Posté par: Sylvie-C le Juillet 23, 2016, 06:07:37 pm
Bonjour !  :)

C'est sûrement très bête ( je débute :-\ ), mais je voudrais pouvoir utiliser ma fonction "wrap", qui remplace par des "\n", en fonction d'une largeur et d'un objet sf::Text donnés en paramètres, les derniers espaces avant le supposé bord droit défini par la largeur.
J'ai testé ma fonction dans un fichier .cpp à part, ça fonctionne, mais quand j'essaie de l'utiliser dans le jeu que je m'amuse à créer pour m'entraîner (le basique mais célèbre jeu du mot mystère), je n'y arrive pas.

J'ai un fichier "main.cpp", puis 2 autres : "fonctions.cpp" et "fonctions.h", ma fonction "wrap" se trouvant donc implémentée dans "fonctions.cpp" et définie dans "fonctions.h".

Définition de ma fonction "wrap" :   
void wrap (std::size_t width , sf::Text text) ;

Dans le programme du "main", j'écris donc les extraits suivants :
...

#include <SFML/System.hpp>
#include <SFML/Window.hpp>
#include <SFML/Graphics.hpp>

#include "fonctions.h"

sf::Text texte1 ;
texte1.setFont( ... ) ;
...
texte1.setString(L"Vous devez deviner le mot en replaçant les lettres dans le bon ordre.") ;
...
wrap ( 790 , texte1 ) ;    // 800 étant la largeur de ma fenêtre (RenderWindow)
...
window.draw(sprite) ;
window.draw(texte1) ;
...

Aucune erreur n'est relevée par le compilateur, mais mon texte n'est pas "wrappé" : il reste sur une ligne qui dépasse la largeur de ma fenêtre.
Je sais, je pourrais directement écrire les "\n" à la création du String, mais c'est pour pratiquer que j'essaie de créer cette fonction "wrap".

Peut-être y aurait-il un autre moyen qui m'échappe, grâce à Sfml, pour "wrapper" découper mon texte afin qu'il ne dépasse pas le cadre de la fenêtre en largeur ?

Merci pour vos éventuelles lumières. :)
Titre: Re : fonction wrap
Posté par: Laurent le Juillet 23, 2016, 06:19:31 pm
Et on est censés faire quoi exactement ?
Titre: Re : fonction wrap
Posté par: Sylvie-C le Juillet 23, 2016, 06:45:10 pm
Peut-être pouvez-vous m'expliquer d'où vient ce problème d'affichage du texte ? Je suppose que c'est une mauvaise utilisation de ma part d'SFML, d'où ma question sur ce forum d'Aide ...
Merci.
Titre: Re : fonction wrap
Posté par: G. le Juillet 23, 2016, 07:40:34 pm
Tu passes ton sf::Text par copie à ta fonction wrap, donc ce qui est fait à l'intérieur de cette fonction est fait sur une copie dont tu ne te sers apparemment jamais.
Passe ton sf::Text par référence ou par pointeur.
Titre: Re : fonction wrap
Posté par: Laurent le Juillet 23, 2016, 09:28:34 pm
Citer
Peut-être pouvez-vous m'expliquer d'où vient ce problème d'affichage du texte ? Je suppose que c'est une mauvaise utilisation de ma part d'SFML, d'où ma question sur ce forum d'Aide ...
Merci.
Merci d'avoir édité ton post pour ajouter du code et une description. Mais la prochaine fois indique le dans ta réponse, maintenant mon premier post semble totalement hors de propos, voire agressif... ;)
Titre: Re : Re : fonction wrap
Posté par: Sylvie-C le Juillet 23, 2016, 10:35:55 pm
Tu passes ton sf::Text par copie à ta fonction wrap, donc ce qui est fait à l'intérieur de cette fonction est fait sur une copie dont tu ne te sers apparemment jamais.
Passe ton sf::Text par référence ou par pointeur.

Merci G. Je vais tenter un passage par référence.

Citer
Peut-être pouvez-vous m'expliquer d'où vient ce problème d'affichage du texte ? Je suppose que c'est une mauvaise utilisation de ma part d'SFML, d'où ma question sur ce forum d'Aide ...
Merci.
Merci d'avoir édité ton post pour ajouter du code et une description. Mais la prochaine fois indique le dans ta réponse, maintenant mon premier post semble totalement hors de propos, voire agressif... ;)

Désolée Laurent, j'ai en fait posté sans faire gaffe pendant que j'écrivais, avant d'avoir fini, et vous avez répondu avant que je termine (plus rapide que l'éclair ! :) ) au 1er message qui ne ressemble à rien, un peu énervant (parce-que c'est vrai que vous avez l'air énervé  ;D ) . J'éviterai de modifier mes messages quand une réponse y aura déjà été faite maintenant, sorry. :)
Merci pour vos réponses en tout cas.