|
| Fenêtre de Texte de la fonction Display | |
| | Auteur | Message |
---|
Baguettator Cliqueur Amateur
Nombre de messages : 232
Date d'inscription : 21/05/2020
| Sujet: Fenêtre de Texte de la fonction Display Mer 21 Oct 2020 - 18:08 | |
| Bonjour communauté de la tasse bleue ! Je viens poser une question sur un aspect de l'éditeur AGS que je n'ai pas encore testé, et je préfère demander avant de bidouiller et de faire n'importe quoi... Dans mon jeu, lorsque j'utilise la fonction "Display", cela affiche mon texte dans un rectangle blanc avec une bordure noire. J'aurai voulu savoir si c'est possible de changer l'affichage de ce message par un affichage plus sympa et plus cohérent avec le graphisme de mon jeu ? J'ai l'impression que la fonction SetTextWindowGUI permet de faire cela, mais je n'en suis pas sûr. Et je préfère pas essayer un truc qui risquerait de faire d'autres choses pas intéressantes... Si j'ai bien compris, on crée un GUI spécial qui s'appelle un TextWindowGui, AGS lui attribue un ID et on attribue ce TextWindowGui à la fonction ci-dessus ? Ainsi les textes du Display seront affichés dans cette fenêtre ? Est-ce que la taille de la fenêtre sera adaptée à la longueur du texte, ou sera-t-elle figée ? J'ai déjà modifié la police de texte de ces messages "Display", mais peut-être que je peux attribuer une police à ce TextWindowGui et ça évite de faire Game.NormalFont=MaFontpourDisplay ? Peut-être que les TextWindowGUI ont d'autres utilités/applications pratiques dans un jeu ? Merci d'avance si quelqu'un peut m'aider ! |
| | | Kitai Délégué de la tasse bleue
Nombre de messages : 2907
Date d'inscription : 01/08/2006
| Sujet: Re: Fenêtre de Texte de la fonction Display Mer 21 Oct 2020 - 18:23 | |
| Salut @Baguettator, T'as tout bon. La taille de la fenêtre s'adaptera, c'est pour ça que tu définis des images pour chaque coins et des images pour chaque bord. Je vois pas trop d'autres applications possibles que celle-ci _________________ Ga is Ga Vous pouvez consulter l' aide d'AGS 3.2 en français et contribuer à la traduction et à l'amélioration si le cœur vous en dit ! |
| | | Baguettator Cliqueur Amateur
Nombre de messages : 232
Date d'inscription : 21/05/2020
| Sujet: Re: Fenêtre de Texte de la fonction Display Mer 21 Oct 2020 - 18:31 | |
| Merci Kitai ! Pas évident de faire une belle fenêtre, car si je comprends bien, les images de bord vont se répéter, et donc si c'est pas bien calculé, ça va faire des choses pas régulières (dans le cas de rayures par exemple). Je vais chercher à faire un graphisme |
| | | Baguettator Cliqueur Amateur
Nombre de messages : 232
Date d'inscription : 21/05/2020
| Sujet: Re: Fenêtre de Texte de la fonction Display Sam 14 Nov 2020 - 20:24 | |
| Nouvelle question à propos de ce sujet : J'essaye de faire une TextWindowGui pour les textes du Display, mais le graphisme que j'essaye de faire est trop complexe. Un grand rectangle orange avec des bordures de la même couleur, mais les bordures (assez épaisses) sont hachurées par des bandes noires. Le texte étant écrit à l'intérieur de ces bordures, donc sur un fond orange. En faisant tout ça via une Text Window Gui, rien à faire, c'est impossible. Les rayures ne sont jamais bien alignées. Du coup, je me demande si je peux faire comme cela : - une Text Window Gui, qui n'est rien d'autre qu'un carré orange qui sera redimenssionné pour servir de fond au texte du display - un GUI qui servira à afficher la décoration du TextWindowGui, et qui s'adaptera donc à ses dimmensions. Pour cela : - Un Bouton dans ce GUI, de dimmensions supérieures à la taille maximale du TextWindowGui (mon jeu étant en 1920*1080, je peux par exemple choisir de le dimmensionner en 1400*800) - lorsque le TextWindowGui est appellé (via la fonction Display) (pour cela, je peux mettre quelque chose dans le repeteadly execute always qui détecte quand le TextWindowGui est visible, ça peut marcher ainsi ?), le GUI s'affiche également - je crée une dynamic sprite, sur laquelle je dessine l'image du fond orange hachuré de noir en 1400*800 (elle servira pour les bordures) - je récupère les dimmensions du TextWindowsGui (qui est déjà adapté au texte du display), et j'en déduis les dimmensions voulues pour ma Dynamic Sprite : si je veux des bordures de 20 pixels de large, et que le TextWindowGui a pour dimmensions 800*400, alors je rogne l'image de la DynamicSprite (fonction Crop) pour avoir 840*440 - je donne cette dynamic sprite en tant que NormalGraphic du bouton de mon GUI - je positionne le bouton du GUI correctement par rapport au TextWindowGui, dans mon cas : TextWindowGui.X - 20 et TextWindowGui.Y - 20 (ces formules sont sans doutes fausses, mais il doit bien y avoir quelque chose du genre qui existe ?) - je fais en sorte (via le zOrder) que le GUI s'affiche derrière le TextWindowGui Est-ce que vous pensez que cela est possible à faire ? J'ai juste peur que la fonction Display, qui gèle le jeu au moment où elle est appellée, empêche de faire ce genre de choses, mais peut-être qu'avec le repeatedly execute always, cela est malgré tout possible ! Sinon, une autre solution ? Je peux peut-être refaire moi-même une fonction "Display", mais qui ne gèle pas le jeu (le met juste en pause, peut-être), et auquel cas avoir juste un GUI avec le bon affichage, plus besoin de TextWindowGui. |
| | | Kitai Délégué de la tasse bleue
Nombre de messages : 2907
Date d'inscription : 01/08/2006
| Sujet: Re: Fenêtre de Texte de la fonction Display Dim 15 Nov 2020 - 18:05 | |
| Honnêtement c'est comme pour tes autres suggestions, la meilleure façon de savoir si ça marche c'est d'essayer Tout le code exécuté avant l'exécution d'une fonction bloquante comme Display prend effet, donc si tu prends soin d'afficher des images avant d'utiliser Display, ça devrait marcher. Sinon tu peux aussi regarder SayBackground_________________ Ga is Ga Vous pouvez consulter l' aide d'AGS 3.2 en français et contribuer à la traduction et à l'amélioration si le cœur vous en dit ! |
| | | Baguettator Cliqueur Amateur
Nombre de messages : 232
Date d'inscription : 21/05/2020
| Sujet: Re: Fenêtre de Texte de la fonction Display Lun 16 Nov 2020 - 11:15 | |
| - Kitai a écrit:
- Honnêtement c'est comme pour tes autres suggestions, la meilleure façon de savoir si ça marche c'est d'essayer
Et oui, c'est vrai que j'ai préféré demander l'avis de connaisseurs avant de me lancer, mais c'est en fait un mauvais réflexe Je viens de mettre au point ma fonction DisplayCustom(String message) : elle adapte la taille des bordures via une DynamicSprite, elle adapte la taille du fond via une autre DynamicSprite, et elle adapte la taille du texte de sorte que ça soit toujours un rectangle (donc en gardant un ratio de 1/3 entre hauteur et largeur) ! Encore une fois, merci pour toutes vos aides, car en ayant scripté cela moi-même en une trentaine de minutes, je me félicite d'avoir beaucoup progressé dans AGS (grâce à vous, ceux du forum !) Néanmoins, je bloque pour aller plus loin : j'aimerais que le texte de cette fonction soit comme la fonction Display, dans le sens qu'on puisse écrire : - Code:
-
DisplayCustom("Et oui ! J'ai %d ans, j'habite dans le %d et je mesure %d mètres !", age, departement, taille); Le problème c'est que je n'arrive pas à traduire cela sous forme de fonction, et je ne sais pas comment la fonction Display est codée. J'ai essayé de l'imiter en écrivant : - Code:
-
function DisplayCustom(const string message, ...) { // mon code } Mais ça ne marche pas (et je ne comprends pas trop ce que j'ai écrit, j'ai juste recopié ce qui est proposé dans la fonction Display par défaut)... Une idée ? Ce serait quelque chose comme du String.Format, mais je ne sais pas comment le transcrire en paramètre d'une fonction. Je sais qu'il y aurait une solution en faisant : - Code:
-
String monmessage=String.Format("Et oui ! J'ai %d ans, j'habite dans le %d et je mesure %d mètres !", age, departement, taille);
DisplayCustom(monmessage); Mais ça dédouble les actions à écrire dans le script si on veut diffuser un message avec des variables. Voici le script actuel de ma fonction : (peut-être à terme un module à publier ? C'est quand même plus simple que d'éditer une TextWindow ?) - Code:
-
// new module script DynamicSprite *fond; DynamicSprite *fondorange;
function DisplayCustom(String message) { gCustomDisplay.Visible=true; int spritefond=365; int spritehachures=366; int hauteur=100; // On définit une hauteur minimale (100) au label int l=300; // La largeur minimum du label int h=GetTextHeight(message, LabelFenetreTexte.Font, l); // On déduit la hauteur du label avec le texte "message" dans sa largeur minimale while (h > hauteur) { hauteur=hauteur + 10; l=l + 30; h=GetTextHeight(message, LabelFenetreTexte.Font, l); } LabelFenetreTexte.Height=h; LabelFenetreTexte.Width=l; LabelFenetreTexte.Text=message; int hauteurtotale=h+200; int largeurtotale=l+200; // On s'occupe des Bordures fond = DynamicSprite.Create(largeurtotale, hauteurtotale); DrawingSurface *dessin = fond.GetDrawingSurface(); dessin.DrawImage(0, 0, spritefond, 0, largeurtotale, hauteurtotale); dessin.DrawImage(0, 0, spritehachures, 0, largeurtotale, hauteurtotale); dessin.Release(); Bordures.NormalGraphic=fond.Graphic; Bordures.SetPosition((1920-Bordures.Width)/2, (1080-Bordures.Height)/2); // On s'occupe du fond orange du texte int ecart=30; fondorange = DynamicSprite.CreateFromExistingSprite(spritefond, false); fondorange.Crop(0, 0, LabelFenetreTexte.Width + (ecart*2), LabelFenetreTexte.Height + (ecart*2)); FondOrange.NormalGraphic=fondorange.Graphic; FondOrange.SetPosition(Bordures.X + 70, Bordures.Y + 70); // On place le Texte au milieu de tout ça ! LabelFenetreTexte.SetPosition(FondOrange.X + ecart, FondOrange.Y + ecart); if (IsGamePaused()==0) PauseGame(); } |
| | | Kitai Délégué de la tasse bleue
Nombre de messages : 2907
Date d'inscription : 01/08/2006
| Sujet: Re: Fenêtre de Texte de la fonction Display Lun 16 Nov 2020 - 16:59 | |
| Malheureusement c'est une limitation du langage AGS, tu ne pourras pas définir une fonction qui se comporte comme Display de ce point de vue là. Pour la petite explication, le problème vient du fait qu'en fonction des codes % dans le texte de Display (= le premier argument de la fonction) tu vas passer un nombre différent d'arguments supplémentaires et, surtout, des arguments de types différents. AGS exige de connaître le nombre d'arguments en avance (même s'il te permet d'en marquer certains comme optionels lors de l'import de la fonction) ainsi que leur type (int, bool, String, etc). La solution la plus courte ça reste donc ça : - Code:
-
DisplayCustom( String.Format("Et oui ! J'ai %d ans, j'habite dans le %d et je mesure %d mètres !", age, departement, taille) ); _________________ Ga is Ga Vous pouvez consulter l' aide d'AGS 3.2 en français et contribuer à la traduction et à l'amélioration si le cœur vous en dit ! |
| | | Baguettator Cliqueur Amateur
Nombre de messages : 232
Date d'inscription : 21/05/2020
| Sujet: Re: Fenêtre de Texte de la fonction Display Sam 28 Nov 2020 - 23:01 | |
| Top, merci Kitai pour l'aide ! J'ai réussi à simuler la fonction "bloquante" de "Display" avec la fonction "wait" et un petit while qui attend que l'on clique gauche. |
| | | Contenu sponsorisé
| Sujet: Re: Fenêtre de Texte de la fonction Display | |
| |
| | | | Fenêtre de Texte de la fonction Display | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |