Forum d'entraide à la création de jeux d'aventure
 
PortailPortail  AccueilAccueil  RechercherRechercher  S'enregistrerS'enregistrer  Connexion  
-15%
Le deal à ne pas rater :
(Adhérents) LEGO® Icons 10318 Le Concorde
169.99 € 199.99 €
Voir le deal

 

 Fenêtre de Texte de la fonction Display

Aller en bas 
2 participants
AuteurMessage
Baguettator
Cliqueur Amateur
Cliqueur Amateur
Baguettator


Nombre de messages : 231

Date d'inscription : 21/05/2020


Fenêtre de Texte de la fonction Display Empty
MessageSujet: Fenêtre de Texte de la fonction Display   Fenêtre de Texte de la fonction Display EmptyMer 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 ! langue
Revenir en haut Aller en bas
Kitai
Délégué de la tasse bleue
Délégué de la tasse bleue
Kitai


Nombre de messages : 2907

Date d'inscription : 01/08/2006


Fenêtre de Texte de la fonction Display Empty
MessageSujet: Re: Fenêtre de Texte de la fonction Display   Fenêtre de Texte de la fonction Display EmptyMer 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
Revenir en haut Aller en bas
http://admin.no.uchi.free.fr/dokuwiki-2008-05-05/doku.php
Baguettator
Cliqueur Amateur
Cliqueur Amateur
Baguettator


Nombre de messages : 231

Date d'inscription : 21/05/2020


Fenêtre de Texte de la fonction Display Empty
MessageSujet: Re: Fenêtre de Texte de la fonction Display   Fenêtre de Texte de la fonction Display EmptyMer 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 sourire
Revenir en haut Aller en bas
Baguettator
Cliqueur Amateur
Cliqueur Amateur
Baguettator


Nombre de messages : 231

Date d'inscription : 21/05/2020


Fenêtre de Texte de la fonction Display Empty
MessageSujet: Re: Fenêtre de Texte de la fonction Display   Fenêtre de Texte de la fonction Display EmptySam 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 ! sourire

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.
Revenir en haut Aller en bas
Kitai
Délégué de la tasse bleue
Délégué de la tasse bleue
Kitai


Nombre de messages : 2907

Date d'inscription : 01/08/2006


Fenêtre de Texte de la fonction Display Empty
MessageSujet: Re: Fenêtre de Texte de la fonction Display   Fenêtre de Texte de la fonction Display EmptyDim 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 clin d'oeil

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
Revenir en haut Aller en bas
http://admin.no.uchi.free.fr/dokuwiki-2008-05-05/doku.php
Baguettator
Cliqueur Amateur
Cliqueur Amateur
Baguettator


Nombre de messages : 231

Date d'inscription : 21/05/2020


Fenêtre de Texte de la fonction Display Empty
MessageSujet: Re: Fenêtre de Texte de la fonction Display   Fenêtre de Texte de la fonction Display EmptyLun 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 clin d'oeil

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 sourire

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();
}
Revenir en haut Aller en bas
Kitai
Délégué de la tasse bleue
Délégué de la tasse bleue
Kitai


Nombre de messages : 2907

Date d'inscription : 01/08/2006


Fenêtre de Texte de la fonction Display Empty
MessageSujet: Re: Fenêtre de Texte de la fonction Display   Fenêtre de Texte de la fonction Display EmptyLun 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) );
Revenir en haut Aller en bas
http://admin.no.uchi.free.fr/dokuwiki-2008-05-05/doku.php
Baguettator
Cliqueur Amateur
Cliqueur Amateur
Baguettator


Nombre de messages : 231

Date d'inscription : 21/05/2020


Fenêtre de Texte de la fonction Display Empty
MessageSujet: Re: Fenêtre de Texte de la fonction Display   Fenêtre de Texte de la fonction Display EmptySam 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.
Revenir en haut Aller en bas
Contenu sponsorisé





Fenêtre de Texte de la fonction Display Empty
MessageSujet: Re: Fenêtre de Texte de la fonction Display   Fenêtre de Texte de la fonction Display Empty

Revenir en haut Aller en bas
 
Fenêtre de Texte de la fonction Display
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Déplacement pendant un Display/Speech.
» DISPLAY : le jeu se met en pause
» Bouton de fenetre
» [résolu] Pas de "Display" possible dans repeatedly_execute_always() ?
» [résolu]Display au survol d'un bouton de GUI

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Adventure Games Studio fr :: CREATION DE JEUX :: Questions / Réponses-
Sauter vers: