Ceci est un exemple de dialogue
Bonjour, je me nomme Ava.
Je suis un agent de dialogue et cette présentation est destinée à vous apprendre ce que je sais faire.
Je souhaite commencer par dissiper tout malentendu : le dialogue que nous allons avoir ici, même si il est interactif, est entièrement écrit à l'avance.
Autant pour le libre arbitre... Désolée !
Ce dialogue est écrit en langage XML, c'est à dire eXtensible Language Markup.
C'est un langage balisé qui vous rappellera beaucoup le HTML.
Avant de démarrer, veuillez ouvrir le fichier index.html avec notepad++ afin de voir de quelle manière est "écrit" ce dialogue dans la balise <xml>
Contrairement à du HTML, ici tout n'est pas affiché en même temps, mais de manière chronologique...
...ce qui semble normal pour un dialogue.
L'ensemble est appelé une scène, et la scène contient différents éléments...
des agents de dialogue, comme moi même !...
des diapos, c'est ce que vous pouvez appercevoir en arrière plan...
et des messages. Il s'agit du texte défilant que vous lisez et sur lequel vous pouvez cliquer à tout moment.
Chacun de ces éléments possède des options, et les messages peuvent même être un peu plus interactifs. D'ailleurs...
...avez vous ouvert le fichier index.html de l'archive dont je vous ai parlé ?
Ben, alors ? Ca devrait être fait depuis un moment !
Mais si, souvenez vous : quand vous avez lu méticuleusement l'énoncé du TD qui proposait de télécharger une archive agent-dialogue-demo.zip contenant la présente démonstration.
Cette archive contient tout le dialogue que nous sommes en train d'avoir. Si vous la dézippez et éditez le fichier index.html, vous aurez de meilleures chances de comprendre comment je fonctionne.
Bien sûr, il est souvent nécessaire de relancer de nombreuses fois ce dialogue et de comparer ce qui est dit avec le contenu du fichier pour être sûr de bien comprendre.
Allez, je vous aide un peu : en arrière plan, cliquez sur télécharger ici, et enregistrez la.
Ensuite, il faut aller chercher cette archive et recopier son contenu (ou la dézipper) dans votre dossier de travail.
Une fois les fichiers en place, faites clic-droit sur index.html et ouvrir avec notepad++. Le dialogue se trouve dans la balise <xml>
Alors ?....
Très bien ! On va pouvoir continuer.
Vous pouvez voir dans la balise XML que le premier élément est une <scene> et qu'elle contient tous les autres.
La première balise qu'on y trouve est une <diapo>. Elle sera affichée en fond et est décrite simplement en HTML.
Et enfin, les <messages> qui se trouvent à l'intérieur des balises <agentDialogue> et qui contiennent eux-même d'autres balises...
Pour faire simple, les balises <p> sont des phrases prononcées, et les balises <ul> contiennent des choix de dialogue <li>.
Avez-vous suivi jusque là ?
Je suis une incorrigible bavarde, désolée.
Allez, un peu de courage, c'est bientôt fini !
![]() |
![]() |
Un petit exemple : préférez vous la montagne ou la mer ?
Eh oui, la montagne ça vous gagne !
La beauté des fonds marins....
Voyez-vous, il est possible d'affecter une variable à l'aide de <set>
Et de placer un attribut condition="..." sur n'importe quel élément. Il ne sera affiché que si la condition est validée.
Bien, une dernière chose par rapport aux conditions...
Il est également possible de réaliser des test <if>, <then>, <else>, ce qui est très pratique pour des changements plus importants dans le dialogue.
Par exemple, l'attribut name dans la balise <agentDialogue name='ava' transition='fade'> précise que je suis l'agent de dialogue à afficher, et qu'a la fin je disparaît progressivement (fade en anglais).
Tandis que l'attribut transition='stay' m'aurait permis de rester...
Il existe pas mal d'attributs, et il ne faut pas les connaître par coeur.
Les attributs sont importants pour bien faire fonctionner les dialogues...
Par exemple, si vous voulez poser une question avec une seule réponse possible, il faut utiliser l'attribut "type=once" sur le menu de choix <ul type='once'>
Aussi, si vous voulez que les questions possibles ne puissent être posées qu'une seule fois chacune, il faut mettre ce même attribut sur la question <li type='once'>. Un petit exemple :
Si on ne met aucun attribut type, les choix restent disponibles et peuvent être répétés. Il faut juste penser à mettre un choix de sortie <li type='quit'>.
D'ailleurs, j'ai une bonne et une mauvaise nouvelle !
Cette ligne de dialogue ne sera pas lue parce qu'il s'agit d'un choix type='quit'
Enfin, sachez qu'il est possible d'encapsuler des <ul> dans des <ul>,pour faire des dialogues très profonds.
debug analyseur XML (ignorer si position correspond à une condition='... <...') : Erreur d’analyse XML : balise ne correspondant pas. Attendu : </scene>. Emplacement : http://192.168.0.11/agent-dialogue-demo/scene-demo.xml?dummy=0.7208741285050339 Numéro de ligne 382, Colonne 4 : </diapo> ----------^
On pourrait continuer encore longtemps,
<diapo> | |
---|---|
transition |
|
<agentDialogue> | |
---|---|
name |
|
transition | idem que pour les diapos |
peut contenir les balises <p> (paragraphes) ou <ul> (choix de dialogue) |
<message> | |
---|---|
dt | temps de défilement entre deux caractères. |
peut contenir les balises <p> (paragraphes) ou <ul> (choix de dialogue) | |
<message> <p> | |
peut contenir les balises d'humeur
<neutre /> <explique /> etc... qui animent l'agent de dialogue |
<message> <ul> | |
---|---|
type |
|
DOIT contenir les balises <li> (choix) | |
<message> <ul> <li> | |
type |
|
peut contenir d'autres balises <ul> |
<set> | |
---|---|
var | le nom de la variable à modifier (exemple : "x") |
val | la valeur à donner (exemple : "0", "true", "x+1", etc...) |
peut contenir d'autres balises <ul> | |
<goto> | |
target |
redirige le dialogue vers la cible (par exemple
target='#id1' si id1 et l'id d'un élement de la scene) |
<if> | |
---|---|
condition | un test (ex : "x==1" ) |
peut contenir <then> et <else> | |
<while> | |
condition |
Un test. Attention, si il reste vrai la boucle peut être infinie |
Attention, if et while ne fonctionnent pas dans une diapo |
tout élément | |
---|---|
id | un identifiant unique (id='1', id='reponse3') |
condition | Une condition |
Pour relancer le dialogue, rechargez la page