Forum d'entraide à la création de jeux d'aventure
 
PortailAccueilFAQRechercherS'enregistrerMembresConnexion

Partagez | 
 

 [résolu ] Créer un dialogue non bloquant

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
Pierrec
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue


Nombre de messages : 99

Date d'inscription : 16/06/2011


MessageSujet: [résolu ] Créer un dialogue non bloquant   Lun 10 Mar 2014 - 14:13

Bonjour à tous.
Je me suis (enfin) remis à King of Planastel, ce qui signifie en fait que j'ai tout recommencé à zéro et décidé dorénavant de réfléchir AVANT d'agir.

Suivant ce nouveau précepte, je viens ici vous demander des avis avant de me lancer à corps perdu dans quelque chose qui ne fonctionnera peut-être pas.

Voilà : Je voudrais créer pour mon jeu des dialogues, ou du moins des menus de choix non-bloquants.

Au cours du jeu en effet, le joueur va faire face à divers événement qui lui demanderont de faire des choix, façon fiction interactive. La fonction dialogue d'AGS est bien pratique pour mettre ceci en place MAIS, je voudrais aussi que le joueur puisse demander leur avis aux compagnons qui l'accompagnent en cliquant dessus.

Un exemple idiot pour illustrer ce que je veux faire :

Code:
Display("Vous faites face à un monstre.");
dMonstre.Start();
//Les 3 options de dMonstre s'affichent alors à l'écran ( a)Combattre, b)Fuir, c)Jouer de la trompette")

//et ailleurs dans mon script j'ai un
function cCopain_interact{
cCopain.Say("Je ne pense pas que ce soit une bonne idée de jouer de la trompette");
}
//qui s'éxecute même si la fenêtre de dialogue est ouverte

Avec la fonction dialogue par défaut d'AGS, cela ne marche pas, une fois la fenêtre de dialogue ouverte, aucune interaction n'est permise sinon de faire un choix.Même pas via un repetedly execute always. Je cherche donc un moyen de contourner ce problème, et j'ai déjà imaginé plusieurs solutions.

Solution 1:
Il existe un moyen de désactiver la fonction bloquante des dialogues d'AGS et je suis trop idiot pour la trouver.

Solution 2:
Créer un affichage des dialogues personnalisé comme expliqué ici http://admin.no.uchi.free.fr/dokuwiki-2008-05-05/doku.php?id=personnalisation_de_l_affichage_des_options_des_dialogues. Peut-être que je pourrais me servir du function dialog_options_mouse_click ? Le problème c'est que je ne vois pas trop comment et que le
Citation :
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.
ne m'encourage guère dans cette voie

Solution 3 :
Abandonner complètement l'outil dialogue d'AGS pour utiliser plutôt un GUI à boutons. C'est celle que j'ai adopté pour le moment, et elle marche. Mais qu'est-ce que c'est pas pratique...!
J'ai le texte de l'event et celui des boutons dans ma fonction custom Event
Les conséquences du choix du joueur dans mes fonctions button_OnClick
Et les commentaires des camarades dans les fonctions character_Interact
Quand j'aimerais bien avoir tout ça rassemblé dans un même endroit (les textes et les conséquences du choix au moins, comme pour les dialogues d'AGS).
Cette solution m'embete aussi parce que j'adore AGS surtout pour sa fonction dialogue qui est très pratique, alors si je ne l'utilise même plus...

Auriez-vous donc une autre solution à proposer, ou un moyen d'améliorer celle que j'ai trouvé ?


(Mon post est déjà assez long, donc je me permet d'expliciter un peu plus ma méthode dans le spoiler :
Spoiler:
 


Dernière édition par Pierrec le Dim 23 Mar 2014 - 11:45, édité 2 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Kitai
Délégué de la tasse bleue
Délégué de la tasse bleue


Nombre de messages : 2430

Date d'inscription : 01/08/2006


MessageSujet: Re: [résolu ] Créer un dialogue non bloquant   Lun 10 Mar 2014 - 15:04

Salut Pierrec,

EDIT : Voilà, comme ça arrive souvent, je suis finalement retombé dessus après avoir posté ce message...
Bon, j'ai cherché un peu sur le forum anglophone (ce que tu as dû faire aussi j'imagine) parce qu'il me semblait qu'il y avait déjà un module dans cet esprit. Je suis finalement juste tombé sur ce message de Monsieur OUXX qui n'est pas très satisfaisant.
L'option dont il parle s'appelle je pense "Run game loops while dialog options are displayed" mais ça a pour seul effet de continuer les animations, les clics de souris restant inactifs hors des options de dialogue.

La remarque du manuel sur le fil non-bloquant est en fait lié à ça : les dialogues bloquent l'exécution du jeu (au moins les scripts) mais on a besoin malgré tout de gérer l'affichage. On passe donc sur un fil qui s'exécute même lorsque les scripts (sur les autres fils pour le coup) sont bloqués. Ce fil ne doit donc jamais se voir bloqué lui-même, sinon il perdrait sa fonction de fil non-bloquant et menacerait le bon déroulement du code (voir repeatedly_execute_always). En bref, ce n'est clairement pas recommandé d'utiliser les commandes Say et cie dans ces fonctions.

La solution 3 me paraît malheureusement la plus efficace. Je ne vois pas vraiment moyen de détourner ("hacker" comme dirait l'autre) le système de dialogues interne. En revanche il est possible de faire un module qui rend la gestion un peu moins laborieuse que du cas par cas, mais ça ne sera jamais aussi confortable que le système pré-intégré.

_________________
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 !


Dernière édition par Kitai le Lun 10 Mar 2014 - 16:39, édité 1 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://admin.no.uchi.free.fr/dokuwiki-2008-05-05/doku.php
Pierrec
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue


Nombre de messages : 99

Date d'inscription : 16/06/2011


MessageSujet: Re: [résolu ] Créer un dialogue non bloquant   Lun 10 Mar 2014 - 15:24

Arf. Je m'en doutais.
J'avais vu en effet plusieurs topics sur les dialogues non bloquants sur le forum anglais, mais ils concernaient soient des animations, soit le "speech" et non le menu de dialogue.

Je pense que je serai déjà très satisfait si j'arrivais à délocaliser tout ce qui concerne ces events dans un module oui, histoire d'avoir tout au même endroit et de ne pas encombrer le globalscript. Mais est-il possible d'avoir des button_OnClick et des character_interact ailleurs que dans le GlobalScript ?
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Kitai
Délégué de la tasse bleue
Délégué de la tasse bleue


Nombre de messages : 2430

Date d'inscription : 01/08/2006


MessageSujet: Re: [résolu ] Créer un dialogue non bloquant   Lun 10 Mar 2014 - 16:37

Pierrec a écrit:
Je pense que je serai déjà très satisfait si j'arrivais à délocaliser tout ce qui concerne ces events dans un module oui, histoire d'avoir tout au même endroit et de ne pas encombrer le globalscript. Mais est-il possible d'avoir des button_OnClick et des character_interact ailleurs que dans le GlobalScript ?
Pour le coup si tu utilises le module proposé par Phemar tu n'as pas besoin de t'encombrer avec la gestion de l'interface il me semble.

À part cela, pour répondre à ta question, la meilleure façon de savoir reste d'essayer clin d\\\\'oeil

_________________
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 !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://admin.no.uchi.free.fr/dokuwiki-2008-05-05/doku.php
Pierrec
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue


Nombre de messages : 99

Date d'inscription : 16/06/2011


MessageSujet: Re: [résolu ] Créer un dialogue non bloquant   Dim 16 Mar 2014 - 10:03

Bon, je vais essayer tout ça dans la semaine et je reviens vous dire ce que ça donne
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Pierrec
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue


Nombre de messages : 99

Date d'inscription : 16/06/2011


MessageSujet: Re: [résolu ] Créer un dialogue non bloquant   Dim 23 Mar 2014 - 11:53

Je viens de passer quelques heures sur le module de Phemar et j'ai réussi à le configurer pour que ça marche comme je veux.

Je me permets de partager ma méthode pour épargner du temps à qui voudrait résoudre le même problème.

Installer les scripts NBD et NBD scriptfiles, ainsi que le module gDialog
La doc se trouve dans le NBD.ash est est très bien expliquée.
Le module dit qu'il est prêt à l'emploi avec le GUI gDialog mais en fait non. Il faut donc copier le code fourni pour les gui custom dans le Global Script (même si on utilise le gui fourni).

Ensuite, pour permettre des interactions tout en gardant la fenêtre de dialogues à l'écran, il faut, dans function on_mouse_click (MouseButton button) { if (nbdDialogRunning) {, ajouter nbdDialogExit = false;

Merci Kitai
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Contenu sponsorisé




MessageSujet: Re: [résolu ] Créer un dialogue non bloquant   Aujourd'hui à 19:52

Revenir en haut Aller en bas
 
[résolu ] Créer un dialogue non bloquant
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» [résolu ] Créer un dialogue non bloquant
» [résolu][Dialogue] - Afficher le Nom du Personnage
» [RÉSOLU]Lapin capricieux n'aime pas orange
» dialogue reconnu
» Besoin d'un tutoriel[résolu]

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: