| [résolu]Problème avec l’autocomplétion des paramètres dans une fonction personnalisée… | |
|
|
Auteur | Message |
---|
Arlann Cliqueur Amateur
Nombre de messages : 286
Date d'inscription : 06/04/2016
| Sujet: [résolu]Problème avec l’autocomplétion des paramètres dans une fonction personnalisée… Ven 30 Sep 2016 - 16:11 | |
| J’ai créé une fonction pour gérer mes dialogues, elle se compose d’une variable String pour le texte du dialogue et de paramètres optionnels définis en enum.
Mon problème est que dès que j’utilise une virgule dans mon dialogue (à l’intérieur des " " qui encadre la String), l’autocomplétion d’AGS se lance pour me proposer un paramètre… Quand ma String est terminée la virgule qui doit appeler le premier paramètre appelle donc le suivant. En bref, l’autocomplétion saute autant de paramètres qu’il y a de virgules dans le texte du dialogue… Pour utiliser correctement ma fonction, je dois taper mes dialogues sans virgule et les rajouter ensuite, ou définir mes paramètres en me passant de l’autocomplétion…
Une autre idée concernant ce problème ?
Dernière édition par Arlann le Sam 1 Oct 2016 - 7:30, édité 1 fois |
|
| |
Kitai Délégué de la tasse bleue
Nombre de messages : 2907
Date d'inscription : 01/08/2006
| Sujet: Re: [résolu]Problème avec l’autocomplétion des paramètres dans une fonction personnalisée… Ven 30 Sep 2016 - 19:28 | |
| Je crois que je vois ce que tu veux dire : seul le surlignage/la suggestion dynamique des paramètres de ta fonction dans l'autocomplétion est affecté par le fait que tu entres des virgules dans la chaîne qui correspond à ton premier paramètre. En première lecture de ton message, je me méprenais et pensais que c'était le texte dans l'éditeur lui-même qui était affecté.
J'ai remarqué ce problème par le passé, ça m'a jamais vraiment perturbé plus que ça, du coup j'ai jamais cherché de solution. Une variante de ta solution est de temporairement entrer une chaîne vide comme premier paramètre, définir tes paramètres optionnels, puis revenir remplir ta chaîne par la suite (ça évite d'ajouter chaque virgule une par une). _________________ 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 ! |
|
| |
Arlann Cliqueur Amateur
Nombre de messages : 286
Date d'inscription : 06/04/2016
| Sujet: Re: [résolu]Problème avec l’autocomplétion des paramètres dans une fonction personnalisée… Ven 30 Sep 2016 - 21:48 | |
| Oui c'est exactement ça, j'ai peut être confondu suggestion dynamique et autocomplétion dans mon explication, je ne sais pas quel est le bon terme. Ce petit bug est intéressant à connaître, ce n'est pas très grave mais au début je me suis arraché les cheveux car je ne comprenais pas pourquoi certains paramètres disparaissaient « aléatoirement » quand j'utilisais ma fonction... Finalement j'ai passé tous les paramètres en optionnels pour ne pas avoir à gérer ce problème quand je taperai la majorité des dialogues. Du coup cela m’amène à une deuxième question ! Un des paramètres est le choix d'activer ou non un « timer » pour passer les dialogues automatiquement. Il est donc optionnel et réglé sur eTimerOn de base. Exemple : - Code:
-
// dans mon script header enum TimerStyle { eTimerOn, eTimerOff, };
import void Parler(this Character*,String dialogue, TimerStyle timer = eTimerOn) ; Je voudrai donner la possibilité au joueur de choisir dans les options du jeu si par défaut le timer est réglé sur On ou Off, tout en gardant la possibilité pour moi de définir sa valeur dans mon script quand j'en ai besoin. En résumé je voudrais avoir une variable booléenne choixTimerStyle accessible par l'utilisateur qui change le paramètre timer dans l'import de ma fonction pour donner ça : - Code:
-
import void Parler(this Character*,String dialogue, TimerStyle timer = eTimerOff) ; Je ne sais pas si ma requête est très claire... Et si mon approche est bonne... |
|
| |
valoulef Délégué de la tasse bleue
Nombre de messages : 1791
Age : 35
Localisation : Condate
Date d'inscription : 01/08/2011
| Sujet: Re: [résolu]Problème avec l’autocomplétion des paramètres dans une fonction personnalisée… Sam 1 Oct 2016 - 0:44 | |
| Si j'ai bien compris, ne peux-tu pas créer un bouton qui permettrait de faire varier cette variable choixTimerStyle de cette manière : - Code:
-
function btnChoixTimerStyle_OnClick(GUIControl *control, MouseButton button) { if (choixTimerStyle == true) choixTimerStyle = false; else if (choixTimerStyle == false) choixTimerStyle = true; } Et ensuite, dans ta fonction Parler : - Code:
-
void Parler(this Character*,String dialogue, TimerStyle timer) { if ((timer == eTimerOn) || (choixTimerStyle == true)){ //Le code à exécuter }
else if ((timer == eTimerOff) || (choixTimerStyle == false)){ //Le code à exécuter } } En l'état c'est sûrement très imparfait et il faudrait adapter le principe à ce que tu veux faire, mais dans l'idée est-ce ce que tu recherches ? _________________ Vous êtes déjà allés à Condate ? Ils ont un petit vin qui à un goût de pierre à catapulte. C'est Toutatis en culotte de velours si j'ose m'exprimer ainsi.
|
|
| |
Arlann Cliqueur Amateur
Nombre de messages : 286
Date d'inscription : 06/04/2016
| Sujet: Re: [résolu]Problème avec l’autocomplétion des paramètres dans une fonction personnalisée… Sam 1 Oct 2016 - 7:23 | |
| Ce n'est pas exactement ça mais ça me donne une bonne piste au lieu de m'acharner à vouloir changer la valeur par défaut dans la déclaration import... Le problème c'est que je veux « garder la main » sur cette option pour forcer la valeur quand j'en ai besoin et passer outre la valeur par défaut. Je vais donc rajouter une valeur dans mon enum, utiliser une variable booléenne choixTimerStyle dans les options du jeu et essayer de faire quelque chose comme ça : - Code:
-
// dans mon script header enum TimerStyle { eTimerOn, eTimerOff, eTimerDefaut };
import void Parler(this Character*,String dialogue, TimerStyle timer = eTimerDefaut) ;
// dans mon script void Parler(this Character*,String dialogue, TimerStyle timer) {
if ( timer == eTimerDefaut && choixTimerStyle == true ) timer = eTimerOn ; else if ( timer == eTimerDefaut && choixTimerStyle == false ) timer = eTimerOff ;
// la suite de mon code
} Il y a peut être plus simple mais je pense que ça va fonctionner ainsi. Merci à vous deux ! |
|
| |
Kitai Délégué de la tasse bleue
Nombre de messages : 2907
Date d'inscription : 01/08/2006
| Sujet: Re: [résolu]Problème avec l’autocomplétion des paramètres dans une fonction personnalisée… Sam 1 Oct 2016 - 22:26 | |
| Je trouve ta décision finale très bonne, c'est probablement la plus propre d'ailleurs. Sinon, est-ce que tu as essayé de passer une variable comme valeur par défaut dans ta déclaration import, comme ça ? - Code:
-
import void Parler(this Character*,String dialogue, TimerStyle timer = choixTimerStyle) ; À vrai dire je doute que ça fonctionne (je pense que les instructions import sont exécutées une fois au début du jeu épicètou, du coup soit le fait d'avoir une variable plaira pas au moteur, soit ça pourra pas changer dynamiquement dans le jeu, mais sètonjamè), et je trouve ça aussi moins propre que ta solution (sans trop savoir expliquer pourquoi). _________________ 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 ! |
|
| |
Arlann Cliqueur Amateur
Nombre de messages : 286
Date d'inscription : 06/04/2016
| Sujet: Re: [résolu]Problème avec l’autocomplétion des paramètres dans une fonction personnalisée… Dim 2 Oct 2016 - 7:37 | |
| A première vue je ne comprends pas trop l’idée puisque choixTimerStyle est une variable booléenne alors que TimerStyle est un enum. J’ai quand même essayé mais AGS refuse de compiler car : - Output a écrit:
- Parameter default value must be literal
- Kitai a écrit:
- (je pense que les instructions import sont exécutées une fois au début du jeu épicètou, du coup soit le fait d'avoir une variable plaira pas au moteur, soit ça pourra pas changer dynamiquement dans le jeu, mais sètonjamè)
Voilà c'était ça le sens profond de ma question ! Quand je cherchais à modifier « de façon dynamique » ma ligne d’import j’ai essayé quelque chose comme ça. - Code:
-
// dans le script header function UpdateParametreUtilisateur( bool choixUtilisateur) { if (choixUtilisateur == true ) import void Parler(this Character* , String dialogue, TimerStyle timer = eTimeOn ); else import void Parler(this Character* , String dialogue, TimerStyle timer = eTimeOff ); } Mais : - Output a écrit:
- 'import' not allowed inside function body
Ce qui ne m’étonne pas vraiment mais il fallait bien que j’essaye ! Il reste peut-être la possibilité d’encapsuler tout ça dans une structure, mais ce serait vraiment tordu car la solution décrite plus haut fonctionne parfaitement. |
|
| |
valoulef Délégué de la tasse bleue
Nombre de messages : 1791
Age : 35
Localisation : Condate
Date d'inscription : 01/08/2011
| Sujet: Re: [résolu]Problème avec l’autocomplétion des paramètres dans une fonction personnalisée… Dim 2 Oct 2016 - 11:41 | |
| Oui dans ce cas là il faudrait que timer soit lui-même une bool, mais quoi qu'il en soit cette option serait moins adaptée si tu veux "forcer" le timer dans certains cas. _________________ Vous êtes déjà allés à Condate ? Ils ont un petit vin qui à un goût de pierre à catapulte. C'est Toutatis en culotte de velours si j'ose m'exprimer ainsi.
|
|
| |
Arlann Cliqueur Amateur
Nombre de messages : 286
Date d'inscription : 06/04/2016
| Sujet: Re: [résolu]Problème avec l’autocomplétion des paramètres dans une fonction personnalisée… Dim 2 Oct 2016 - 12:44 | |
| Oui c'est bien ce que j'ai essayé de faire mais il s'avère qu'on ne peut pas définir un paramètre optionnel à partir d'une autre variable. - Output a écrit:
- Parameter default value must be literal
Que ce soit avec une bool une String une enum..., les paramètres optionnels ont besoin d'une définition littérale. Cela répond peut être à la question : peut ont changer les instructions import pendant le jeu ?A mon avis, c'est impossible... |
|
| |
Contenu sponsorisé
| Sujet: Re: [résolu]Problème avec l’autocomplétion des paramètres dans une fonction personnalisée… | |
| |
|
| |
| [résolu]Problème avec l’autocomplétion des paramètres dans une fonction personnalisée… | |
|