Pages traduites Pages à traduire Pages en cours de traduction
A propos
 


Affichage personnalisé des options de dialogue

Par défaut, AGS propose deux types d'options de dialogue – les afficher en utilisant les dimensions et la positions d'un GUI existant, ou crée une fenêtre de texte pour y afficher les options.

Avec AGS 3.1, si aucune de ces méthodes ne vous convient (par exemple, parce que vous voulez utiliser des options de dialogue basées sur des images, ou si vous voulez ajouter des flèches pour parcourir la liste), vous pouvez désormais implémenter vous-même l'affichage des options de dialogue dans le script.

NOTE : Ce sujet concerne du code complexe. Si vous débutez tout juste avec AGS, vous devriez pour le moment vous contenter des styles d'options de dialogue déjà implémentés, puis revenir à cela plus tard, lorsque vous serez plus à l'aide avec le code.

Pour écrire votre code d'options de dialogue personnalisées, vous devrez faire les choses suivantes :

  • Ajouter une fonction dialog_options_get_dimensions à votre script (voir l'exemple plus bas). Cette fonction est appelée par AGS pour déterminer sur quelle partie de l'écran vous dessinerez. En définissant des valeurs de largeur et de hauteur supérieures à 0, le système de dialogue personnalisé s'active.
  • Ajouter une fonction dialog_options_render, qui est appelée par AGS lorsqu'il faut dessiner les options du dialogue. Elle fournit une DrawingSurface standard, que vous pouvez utiliser pour dessiner.
  • Ajouter une fonction dialog_options_get_active, qui est appelée par AGS lorsque le joueur déplace la souris à l'écran. Elle permet de savoir l'option que la souris survole, afin qu'AGS sache quelle option traiter lorsque le joueur clic sur le bouton de la souris.
  • De façon optionnelle, ajouter une fonction dialog_options_mouse_click. Elle est appelée par AGS si le joueur clique alors qu'il ne survole aucune option. Vous pourriez l'utiliser pour gérer des flèches de défilement personnalisées, par exemple.

Il n'est pas obligatoire de placer ces fonctions dans la script global ; vous pouvez les placer dans le script que vous préférez. Toutefois, gardez-vous des éventuelles interférences et problèmes si vous placez ces fonctions dans plus d'un script à la fois.

IMPORTANT : Lorsque vous ajoutez ces fonctions au script, elles prennent toutes un paramètre de type Fonctions et propriétés d'affichage des options de dialogue (DialogOptionsRenderingInfo) et la fonction dialog_options_mouse_click demande un paramètre supplémentaire pour le bouton de souris. Voyez l'exemple ci-dessous.

IMPORTANT : Les quatre fonctions de dialogue personnalisées sont toutes exécutées sur le fil non-bloquant. Cela signifie que vous ne devriez pas appeler de fonction bloquante, telles que Character.Say, Wait ou Display, à l'intérieur car elles pourraient ne pas se comporter correctement.

Exemple

Voici une implémentation très simple d'un écran d'options de dialogue.

function dialog_options_get_dimensions(DialogOptionsRenderingInfo *info)
{
  // Crée une zone de dimensions 200x200 à la position (50,100) pour les options
  info.X = 50;
  info.Y = 100;
  info.Width = 200;
  info.Height = 200;
  // Place l'analyseur de texte (parser) tout en bas (s'il est activé)
  info.ParserTextBoxX = 10;
  info.ParserTextBoxY = 160;
  info.ParserTextBoxWidth = 180;
}

function dialog_options_render(DialogOptionsRenderingInfo *info)
{
  // Remplit la zone en jaune
  info.Surface.Clear(14);
  int i = 1,  ypos = 0;
  // Affiche toutes les options disponibles
  while (i <= info.DialogToRender.OptionCount)
  {
    if (info.DialogToRender.GetOptionState(i) == eOptionOn)
    {
      if (info.ActiveOptionID == i) info.Surface.DrawingColor = 13;
      else info.Surface.DrawingColor = 4;
      info.Surface.DrawStringWrapped(5, ypos, info.Width - 10,
                         eFontFont0, eAlignLeft, info.DialogToRender.GetOptionText(i));
      ypos += GetTextHeight(info.DialogToRender.GetOptionText(i), eFontFont0, info.Width - 10);
    }
    i++;
  }
}

function dialog_options_get_active(DialogOptionsRenderingInfo *info)
{
  int i = 1,  ypos = 0;
  // Trouve l'option située où le joueur a cliqué
  while (i <= info.DialogToRender.OptionCount)
  {
    if (info.DialogToRender.GetOptionState(i) == eOptionOn)
    {
      ypos += GetTextHeight(info.DialogToRender.GetOptionText(i), eFontFont0, info.Width - 10);
      if ((mouse.y - info.Y) < ypos)
      {
        info.ActiveOptionID = i;
        return;
      }
    }
    i++;
  }
}

function dialog_options_mouse_click(DialogOptionsRenderingInfo *info, MouseButton button)
{
  // faites quelque chose ici si vous le voulez !
}

L'exemple ci-dessus est un peu simpliste ; en réalité vous voudrez probablement mémoriser la position Y de chaque option dans une variable pour ne pas avoir à réexaminer continuellement toutes les options.

Pour plus de détails sur les commandes utilisées ici, consultez la page des fonctions des options de dialogues personnalisées.

Compatibilité : Supporté par AGS 3.1.0 et les versions plus récentes.

 
personnalisation_de_l_affichage_des_options_des_dialogues.txt · Dernière modification: 07/10/2012 16:21 (édition externe)
 
Recent changes RSS feed Creative Commons License Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki