Forum d'entraide à la création de jeux d'aventure
 
PortailPortail  AccueilAccueil  RechercherRechercher  S'enregistrerS'enregistrer  Connexion  
Le Deal du moment : -35%
-35% sur la machine à café Expresso ...
Voir le deal
359.99 €

 

 Interrompre speech / say pour afficher un GUI

Aller en bas 
2 participants
AuteurMessage
Jorkz
Cliqueur Emérite
Cliqueur Emérite
Jorkz


Nombre de messages : 666

Age : 40

Localisation : Montpellier

Date d'inscription : 16/07/2006


Interrompre speech / say pour afficher un GUI Empty
MessageSujet: Interrompre speech / say pour afficher un GUI   Interrompre speech / say pour afficher un GUI EmptyMer 19 Oct 2022 - 18:52

Salut.

De façon à pouvoir l'ouvrir et le fermer avec la touche Echap, j'ai créé un GUI dont le code a été placé dans

Code:

bool was_key_ESC_pressed;

// called on every game cycle, even when the game is blocked
function repeatedly_execute_always()
{
  if(!was_key_ESC_pressed && IsKeyPressed(eKeyEscape)){

mouse.Mode = eModeAller;
mouse.ChangeModeGraphic(eModeAller,1);  
gOptions.Centre();
UnPauseGame();
gOptions.Visible = !gOptions.Visible;
gGui1.Visible = false;
gInventaire.Visible = false;
gBille.Visible = !gBille.Visible;
}
  was_key_ESC_pressed = IsKeyPressed(eKeyEscape);
}

Il s'active et se désactive également comme suit, dans la fonction function on_key_press

Code:
 
function on_key_press(eKeyCode keycode)
{
  if (IsGamePaused())
  {
    keycode = 1;
  }
  else if (keycode == eKeyEscape)
  {

  if(!was_key_ESC_pressed && IsKeyPressed(eKeyEscape)){
mouse.Mode = eModeAller;
mouse.ChangeModeGraphic(eModeAller,1);  
UnPauseGame();
gOptions.Visible = false;
gGui1.Visible = true;
gBille.Visible = true;

}

C'est donc, actuellement, le seul moyen que j'ai trouvé pour que cette touche Echap puisse à la fois ouvrir et fermer le GUI...
Et déjà si certains peuvent me dire si au niveau de mon code je ne fais pas trop trop fausse route, je vous écoute... clin d'oeil

Mais ce qui est embêtant c'est que je n'arrive pas à spécifier à AGS qu'il y a des cas pour lesquels je souhaite que cette touche Echap ne soit pas "opérationnelle".

J'aimerais notamment que lorsqu'un speech ou say est en cours, il soit interrompu par la touche Echap.

Si quelqu'un a une réponse... clin d'oeil

Merci.

_________________
L' est si forte à la course qu'elle en sort de la phrase.  autruche
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


Interrompre speech / say pour afficher un GUI Empty
MessageSujet: Re: Interrompre speech / say pour afficher un GUI   Interrompre speech / say pour afficher un GUI EmptyMer 19 Oct 2022 - 19:55

Je comprends pas trop pourquoi tu as du code à la fois dans repeatedly_execute_always et dans on_key_press, ça semble faire doublon

Si j'ai bien compris, tu veux que la touche Echap permette d'ouvrir le GUI quand il est fermé, et le fermer quand il est ouvert. Je suggère de créer une fonction qui se charge d'ouvrir le GUI, une qui se charge de le fermer, et d'appeler la bonne fonction dans on_key_press en fonction de si le GUI est ouvert ou non, et laisser tomber le repeatedly_execute_always :

Code:
function ouvreOptions() {
    mouse.Mode = eModeAller; // Le nom de ce mode me semble pas correspondre a l'idee d'options
    mouse.ChangeModeGraphic(eModeAller,1); // meme remarque
    gOptions.Centre();
    // UnPauseGame(); // Est-ce qu'ouvrir le GUI doit *quitter* la pause ?
    gOptions.Visible = true;
    gGui1.Visible = false;
    gInventaire.Visible = false;
    gBille.Visible = false;
}
function fermeOptions() {
    mouse.Mode = eModeAller;
    mouse.ChangeModeGraphic(eModeAller,1);
    UnPauseGame();
    gOptions.Visible = false;
    gGui1.Visible = true;
    gInventaire.Visible = true;
    gBille.Visible = true;
}

function on_key_press(eKeyCode keycode)
{
  if (IsGamePaused())
  {
    keycode = 1;
  }
  else if (keycode == eKeyEscape)
  {
    if (gOptions.Visible) fermeOptions();
    else ouvreOptions();
  }
}

Tu peux aussi utiliser repeatedly_execute_always pour vérifier si un quelconque personnage est en train de parler :

Code:
bool unPersoParle = false;

function repeatedly_execute_always() {
  unPersoParle = false;
  for (int n = 0; n < Game.CharacterCount; n++){
    if (character[n].Speaking) unPersoParle = true;
  }
}

Une fois que t'as ça, tu peux remplace le else if dans on_key_press :

Code:
  else if (keycode == eKeyEscape && !unPersoParle)

Pas besoin de faire quoi que ce soit en ce qui concerne Display, puisque c'est une fonction bloquante, donc on_key_press sera jamais exécutée dans ces moments-là

_________________
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
http://admin.no.uchi.free.fr/dokuwiki-2008-05-05/doku.php
Jorkz
Cliqueur Emérite
Cliqueur Emérite
Jorkz


Nombre de messages : 666

Age : 40

Localisation : Montpellier

Date d'inscription : 16/07/2006


Interrompre speech / say pour afficher un GUI Empty
MessageSujet: Re: Interrompre speech / say pour afficher un GUI   Interrompre speech / say pour afficher un GUI EmptyJeu 20 Oct 2022 - 9:08

Rebonjour et merci Kitai !... Ça fait un petit moment qu'on te voyait plus sur ce forum il me semble, non ? J'espère que tout roule pour toi !! clin d'oeil

Alors alors... Hier j'ai tout bien suivi ce que tu me montres ici, ce booléen-pour-ne-pas-prendre-en-compte-l'ESC-lorsque-les-persos-parlent fonctionne vraiment à merveille, c'est exactement ce que je voulais et je t'en remercie !

J'ai mis ça sur le compte de la fatigue hier, mais chez moi il y a un truc qui cloche au niveau de la fonction fermeOptions() qui ne semble tout simplement pas être calculée, même quand je fais un test avec un Display("quelque chose").

Il faut dire aussi que je ne sais pas vraiment comment "configurer" ce GUI (ou s'il y a un truc à cocher dans le General Settings ou truc dans le genre), si je le mets en "normal" ou en "pause game when shown"?... Quoiqu'il en soit, pour l'un ou l'autre, en testant son comportement ensuite ça ne semble pas changer grand chose.  Interrompre speech / say pour afficher un GUI 1049345978

Code:
function ouvreOptions() {
    mouse.Mode = eModeAller; // Le nom de ce mode me semble pas correspondre a l'idee d'options
    mouse.ChangeModeGraphic(eModeAller,1); // meme remarque

Pour ce qui est du comportement de mon curseur, c'est parce que de base j'ai programmé un curseur qui "navigue" (avec le clic droit) entre plusieurs modes "Aller (flèche), Regarder (loupe), Prendre (main) et Parler (petit curseur-phylactère)" et qui processeclique avec un clic gauche.

Outre le fait que l'utilisation du verbe processecliquer en jette un max dans ma phrase, je trouvais cependant qu'avoir une petite bulle ou une petite loupe, et pas une flèche, lors de la navigation dans un menu... était moins élégant que le forcer à revenir au mode Aller, autrement dit la flèche, ce qui est quand même plus propre esthétiquement.

_________________
L' est si forte à la course qu'elle en sort de la phrase.  autruche
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


Interrompre speech / say pour afficher un GUI Empty
MessageSujet: Re: Interrompre speech / say pour afficher un GUI   Interrompre speech / say pour afficher un GUI EmptyJeu 20 Oct 2022 - 17:09

Est-ce que tu as une zone de saisie dans ton GUI "Options" ? La fonction on_key_press se déclenche pas dans ces cas-là (sinon ça interférerait avec le texte qu'on tape)

Si tu crains que y'ait un conflit avec "pause game when shown", tu peux aussi changer légèrement ta fonction on_key_press comme ça :

Code:
 
function on_key_press(eKeyCode keycode)
{
  if (keycode == eKeyEscape)
  {
    if (gOptions.Visible) fermeOptions();
    else ouvreOptions();
  }
  else if (IsGamePaused())
  {
    keycode = 1;
  }
}

_________________
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
http://admin.no.uchi.free.fr/dokuwiki-2008-05-05/doku.php
Jorkz
Cliqueur Emérite
Cliqueur Emérite
Jorkz


Nombre de messages : 666

Age : 40

Localisation : Montpellier

Date d'inscription : 16/07/2006


Interrompre speech / say pour afficher un GUI Empty
MessageSujet: Re: Interrompre speech / say pour afficher un GUI   Interrompre speech / say pour afficher un GUI EmptyJeu 20 Oct 2022 - 17:31

Il n'y a pas de zone de saisie, non...

J'ai tenté ton script, mais ça ne change rien il me semble. ><


EDIT si c'est bon ça marche ! sourire sourire sourire
En fait, fallait juste enlever ça au début de la fonction
Code:

{
  if (IsGamePaused())
  {
    keycode = 1;
  }

Merci beaucoup Kitai, encore une mission réussie !

_________________
L' est si forte à la course qu'elle en sort de la phrase.  autruche
Revenir en haut Aller en bas
Contenu sponsorisé





Interrompre speech / say pour afficher un GUI Empty
MessageSujet: Re: Interrompre speech / say pour afficher un GUI   Interrompre speech / say pour afficher un GUI Empty

Revenir en haut Aller en bas
 
Interrompre speech / say pour afficher un GUI
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» [résolu] Plusieurs views speech pour 1 même perso, possible?
» [résolu] Bug ? Fonction afficher/cacher pour dialogues... ne fonctionne pas :(
» speech
» [résolu]speech
» Déplacement pendant un Display/Speech.

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: