Connaitre les dimensions d'un objet texte

Bonsoir,

Je me demandais si ce serait “bien voir pas trop mal peut être même relativement cool” si on avait un moyen de connaitre la surface occupée par un objet texte. Selon le texte qu’il contient bien sûr.

L’usage premier serait de réaliser des boites de dialogue où la décoration serait à la bonne taille par rapport au texte affiché au dessus.
L’usage second serait de pouvoir contraindre l’affichage d’un texte à un rectangle, la chaine de caractère s’adaptant à l’espace disponible.

Globalement, il s’agit d’éviter ce genre de résultat, sans s’arracher les cheveux à compter les caractères un par un et évaluer leur taille en fonction de la police :

Pour info, revenir à la ligne dans une chaine de caractère se fait en ajoutant " " sans les guillemets.
Marche dans un fichier xml mais aussi dans l’action “affichage de texte”.

C’est déjà possible ( ou alors j’ai pas compris la demande ) : MonObjet.Width() ( et MonObjet.Height() accessoirement ) sont des expressions communes à tous les objets, et qui doivent donc fonctionner pour tous les objets pour lesquels cela a un sens : Les objets textes entre autres.
Comme d’hab, elles peuvent être trouvée par l’intermédiaire des listes présentes dans l’éditeur d’expression.

Je ne me souviens pas avoir vu ça dans les actions de l’objet texte … Je vais tester de plus près en le tapant à la main.

Et c’est dynamique ?
Si le texte change, les dimensions changent aussi ?
Et si je mets une largeur inférieure au texte contenu, le texte revient à la ligne ?

Ce ne sont pas des actions ou des conditions, mais des expressions.
Elles ne permettent que de récupérer la largeur/hauteur mais pas de la modifier.

Si tu change le texte ( ou la police, la taille… ), la largeur/hauteur évolue oui.

J’ai finalement réussi après 4 jours de prise de chou.

Le gros problème est que les positions X et Y d’un sprite restent les mêmes malgré le changement d’échelle. Il y a donc un décalage entre ce qu’on voit à l’écran (un rectangle de 100x50 aux coordonnées -à la louche- 400:300) et ce que GD gère (un rectangle de 1000x500 à l’échelle 0.1 aux coordonnées -200:100).

De plus, j’ai remarqué qu’il est impossible d’avoir accès à la taille d’origine d’un sprite. Sprite.Width() retourne la largeur selon l’échelle en cours, pas selon les valeurs d’origine du fichier image. Pour les calculs de changement d’échelle vis à vis de la largeur de l’objet texte, je suis obligé de mettre en dur les dimensions de l’image, sinon c’est trop la misère dans les permutations.

C’est un joli boxon mental quand on veut positionner un sprite par rapport à un objet texte … dont les coordonnées sont elles fixes et définitives quelque soient les dimensions de la boite texte (le changement de dimensions se fait toujours vers la droite/bas, pas depuis son barycentre comme un sprite).

Pour ce qui est de la demande de nouvelles fonctionnalités, ce serait cool de remplacer l’objet Texte par un objet Cadre de texte, dont les dimensions forcent le retour à la ligne du texte qu’ils contiennent.
Ainsi, on n’a plus à s’embêter dans le fichier xml avec les retours à la ligne en dur, pour que le texte ne dépasse pas de l’écran une fois en jeu.

Sinon, au lancement de la scène et pour chaque objets Sprites (il faut un groupe), tu stocke leur taille dans deux variables d’objet (genre, originalWidth …).

Il y a une expression permettant d’avoir l’échelle de redimensionnement ( Objet.ScaleX() et Objet.ScaleY() de mémoire ).
En faisant Objet.Width()/Objet.ScaleX() tu retrouve donc sa taille originale.

Oui, mais ça rajoute en gymnastique mentale, en complexifiant les formules d’action. Vive les parenthèses en bonus.
Et quand ça bug, je préfère rester sur du simple, sinon je pleure.

J’ai pas envie non plus de rajouter d’autres variables “de confort” à toutes les variables (locales et globales) que je dois déjà gérer. Donc, vive le dur !