Forum d'entraide à la création de jeux d'aventure
 
PortailPortail  AccueilAccueil  RechercherRechercher  S'enregistrerS'enregistrer  Connexion  
-28%
Le deal à ne pas rater :
Brandt LVE127J – Lave-vaisselle encastrable 12 couverts – L60cm
279.99 € 390.99 €
Voir le deal

 

 Sauvegarde F5/F7

Aller en bas 
3 participants
AuteurMessage
Gob
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue
Gob


Nombre de messages : 108

Date d'inscription : 08/10/2021


Sauvegarde F5/F7 Empty
MessageSujet: Sauvegarde F5/F7   Sauvegarde F5/F7 EmptyMar 28 Nov 2023 - 9:07

Hello, je voudrais faire une sauvegarde simplifiée.

Il y a par défaut la touche F5 qui amène à un GUI, mais je voudrais juste qu'il sauve sur un seul emplacement, avec juste un rappel sur l'écran de jeu "Jeu sauvegardé". Et qu'il loade directement quand on presse F7.

Quelqu'un saurait comment faire ?
Revenir en haut Aller en bas
Clique
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue
Clique


Nombre de messages : 106

Date d'inscription : 11/05/2022


Sauvegarde F5/F7 Empty
MessageSujet: Re: Sauvegarde F5/F7   Sauvegarde F5/F7 EmptyVen 1 Déc 2023 - 13:50

Je saurais pas expliquer concrètement (connais pas assez AGS) mais en principe.

Je pense que c'est à voir dans le script global, de modifier la gestion des Event des touches.

Dans mon template actuel (Sierra ?)
Dans le script global, ligne 195 :

Code:
  else if (keycode == eKeyF5)
  {
    // F5 will prompt to save a game
    show_save_game_dialog();
  }
  else if (keycode == eKeyF7)
  {
    // F7 will prompt to save a game
    show_restore_game_dialog();
  }

Si je comprends bien ta demande, il s'agirait de supprimer le dialogue, et enregistrer ou charger directement.

Trouvé dans la doc :
Sauvegarder : https://adventuregamestudio.github.io/ags-manual/Globalfunctions_General.html#savegameslot
Code:
SaveGameSlot(1, "save game");

Là dans cet exemple il s'agit du slot de sauvegarde n°1.
2e paramètre : "save game", même si tu ne t'en sert pas, met y quand même un texte quelconque (nécessaire plus tard).
Dans ton cas tu met ce que tu veux, il faut juste que le slot soit le même dans les deux fonctions.

Charger une sauvegarde : https://adventuregamestudio.github.io/ags-manual/Globalfunctions_General.html#restoregameslot
Code:
RestoreGameSlot(1);

Par contre, avant de déclencher la fonction "RestoreGameSlot" il est recommandé de vérifier que le slot correspondant contienne bien une sauvegarde.
La doc préconise d'utiliser : https://adventuregamestudio.github.io/ags-manual/Game.html#gamegetsaveslotdescription
Code:
String description = Game.GetSaveSlotDescription(1);

Donc si on reprend le bloc initial (gestion des touches F5 / F7)
Code:
// called when a key is pressed
function on_key_press(eKeyCode keycode, int mod)
{
  // check for Escape first, so it can be used on GUIs that pause the game
  if (keycode == eKeyEscape)
  {
        //Tout un tas de choses
  }
  else if (keycode == eKeyF5)
  {
    // F5 will prompt to save a game
    SaveGameSlot(1, "save game");
    Display("Jeu sauvegardé.");
  }
  else if (keycode == eKeyF7)
  {
    // F7 will prompt to save a game
    String description = Game.GetSaveSlotDescription(1);
    if(description) // Il y a une sauvegarde dans le slot 1
    {
        RestoreGameSlot(1);
        Display("Sauvegarde restaurée.");
    }
    else // Il n'y a pas de sauvegarde dans le slot 1
    {
        Display("Pas de sauvegarde.");
    }
  }
    // D'autres conditions d'autres interactions de touches...
}

En espérant que ça aide.
Logiquement ça devrait fonctionner, mais attention car j'ai rien testé..
Revenir en haut Aller en bas
Gob
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue
Gob


Nombre de messages : 108

Date d'inscription : 08/10/2021


Sauvegarde F5/F7 Empty
MessageSujet: Re: Sauvegarde F5/F7   Sauvegarde F5/F7 EmptyVen 1 Déc 2023 - 14:33

Hello, merci de ta réponse, c'est simple, ça fonctionne.

SaveGameSlot(20, "save game");
RestoreGameSlot(20);

20, car j'ai des sauvegardes en début de niveaux.

Effectivement d'est mieux d'avoir une sauvegarde dans l'emplacement, sinon il affiche un pavé louche.
Pour ça, il faut que je trouve comment faire une sauvegarde, seulement une fois en début de jeu. Je pensais à une variable, mais elle risque d'être réinitialisée à chaque démarrage ?

... il faut que je puisse afficher un rappel, "Jeu sauvé, F7 pour recharger", dans l'écran de jeu.

Revenir en haut Aller en bas
Clique
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue
Clique


Nombre de messages : 106

Date d'inscription : 11/05/2022


Sauvegarde F5/F7 Empty
MessageSujet: Re: Sauvegarde F5/F7   Sauvegarde F5/F7 EmptyVen 1 Déc 2023 - 15:02

Gob a écrit:
Effectivement d'est mieux d'avoir une sauvegarde dans l'emplacement, sinon il affiche un pavé louche.

C'est pour ça que j'avais ajouté ce contrôle sur la variable description

Code:
    String description = Game.GetSaveSlotDescription(1);
    if(description) // Il y a une sauvegarde dans le slot 1
    {
        RestoreGameSlot(1);
        Display("Sauvegarde restaurée.");
    }
    else // Il n'y a pas de sauvegarde dans le slot 1
    {
        Display("Pas de sauvegarde.");
    }

En principe la fonction Game.GetSaveSlotDescription(1) doit renvoyer le nom qui a été donné lors de la sauvegarde.
Citation :
If the slot number provided does not exist, returns null.

Si la sauvegarde n'existe pas, c'est null qui est renvoyé.
Si ce bout de code ne fonctionne pas, tu peux essayer de cette autre manière :

Code:
    String description = Game.GetSaveSlotDescription(1);
    if(description == null) // Il n'y a pas de sauvegarde dans le slot 1
    {
        Display("Pas de sauvegarde.");
    }
    else // Il y a une sauvegarde dans le slot 1
    {
        RestoreGameSlot(1);
        Display("Sauvegarde restaurée.");
    }

Gob a écrit:
... il faut que je puisse afficher un rappel, "Jeu sauvé, F7 pour recharger", dans l'écran de jeu.

C'était le but ici par la fonction Display("...")
à moins que tu souhaites l'afficher par un autre moyen.

Et pour ce qui est du rappel, tu pourrais simplement l'ajouter comme ça
Code:
  else if (keycode == eKeyF5)
  {
    // F5 will prompt to save a game
    SaveGameSlot(1, "save game");
    Display("Jeu sauvé, F7 pour recharger"); // <-- ici
  }
Revenir en haut Aller en bas
Clique
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue
Clique


Nombre de messages : 106

Date d'inscription : 11/05/2022


Sauvegarde F5/F7 Empty
MessageSujet: Re: Sauvegarde F5/F7   Sauvegarde F5/F7 EmptyVen 1 Déc 2023 - 15:24

Gob a écrit:
20, car j'ai des sauvegardes en début de niveaux.

Déso, j'avais pas percuté...

Du coups, c'est un peu bizarre et je ne comprends pas trop le principe.
Là le but c'est que le joueur puisse sauvegarder sa progression ou la recharger avec les touches F5/F7

Si à côté de ça, tu jongles avec une vingtaine de slots de sauvegarde (et je ne comprends pas pourquoi tu aurais besoin de le faire...) tu risques de bousiller la progression du joueur.

Par exemple, si le joueur enregistre son point de sauvegarde au bout de 15 min de jeu. Qu'après 20 min de jeu, tu restaure un point de sauvegarde que tu a créé à 10 min de jeu. Par là j'entends que potentiellement, le joueur perd 5 min de sa progression, et que c'est pas du tout clair pour lui. Il pourrait par exemple perdre un objet d'inventaire, sans comprendre pourquoi. C'est comme un bug.

Je ne comprends pas pourquoi tu as besoin de créer des points de sauvegarde de ton côté.
Si c'est pour gérer des points d'étapes dans ton scénario, ou des points d'étapes de certaines Room, tu dois pouvoir le faire via les variables globales tout simplement, et sans te soucier des sauvegardes.
Revenir en haut Aller en bas
Gob
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue
Gob


Nombre de messages : 108

Date d'inscription : 08/10/2021


Sauvegarde F5/F7 Empty
MessageSujet: Re: Sauvegarde F5/F7   Sauvegarde F5/F7 EmptyVen 1 Déc 2023 - 15:56

Hello, merci de tes réponses.

C'est un jeu, (Gobliins6), écran par écran. Je sauve en début de niveau, on peut reprendre chaque niveau. C'est une possibilité que AGS ne donnait pas, ça a été compliqué de trouver comment faire (ce n'est pas moi qui a trouvé, mais Marion). F5 est une sauvegarde d'appoint, je ne vois pas où est le problème.
La fonction display, ok mais ça affiche un pavé pas beau... Comment et où gérer ça ? Pouvoir mettre juste le texte sans pavé, et pas forcément au milieu, c'est possible ? Tout ce qui est GUI, j'ai du mal à capter.
Revenir en haut Aller en bas
Gob
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue
Gob


Nombre de messages : 108

Date d'inscription : 08/10/2021


Sauvegarde F5/F7 Empty
MessageSujet: Re: Sauvegarde F5/F7   Sauvegarde F5/F7 EmptyVen 1 Déc 2023 - 16:50

J'ai créé un Gui, gGui1, mais je n'arrive pas à l'afficher:

gGui1.Visible=true;

open_gui (gGui1);

Rien ne marche... En plus, je préfèrerais mettre un objet que je pourrais afficher en fondu.
Revenir en haut Aller en bas
Clique
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue
Clique


Nombre de messages : 106

Date d'inscription : 11/05/2022


Sauvegarde F5/F7 Empty
MessageSujet: Re: Sauvegarde F5/F7   Sauvegarde F5/F7 EmptyVen 1 Déc 2023 - 17:36

OK, je suis un peu navré de ma manière de répondre.
Pour expliquer ma situation, je sais programmer dans une variété de langage et j'ai expérimenté plusieurs engins. Par contre je débarque complètement sur AGS, et le langage de ses script est une forme plus rigoureuse que ce dont j'ai l'habitude.

En bref : J'hallucine de ne pas trouver une fonction aussi basique d'afficher un simple texte où on voudrait sur l'écran... (Tu m'as fait découvrir qu'on est obligé de passer par un GUI et le bazar qui va avec...)

Peut-être que le plus simple (pour ne pas avoir à bricoler un GUI), ce serait d'utiliser ça (à la place de la fonction Display) :
Code:
cEgo.SayAt(220, 20, 100, "My name is ego");

À savoir, un dialogue de personnage.
Dans l'ordre des arguments : position X, position Y, texte.
Si t'as besoin de distinguer l'aspect du texte, d'un dialogue du personnage principal, tu peux en créer un Character qui serait exclusivement dédié à ça (pas besoin de lui créer un nom ou des sprites...). Tu changes sa propriété "SpeechColor" par celle qui te conviens.
Et dans le script global : (vérifie sa propriété Design : ScriptName, ici cChar1)
Code:
cChar1.SayAt(10, 280, 200, "Jeu sauvé, F7 pour recharger");

Sinon, la fenêtre moche de la fonction Display correspond avec le GUI : gTextBorder
https://adventuregamestudio.github.io/ags-manual/EditorGUI.html#customized-text-windows
Tu peux supprimer les motifs de bordure, changer les couleurs. Je sais pas s'il est possible de mettre un fond transparent ou l'afficher où on veut dans l'écran...

Et concernant les sauvegardes, si tu veilles à bien gérer le tout, ça peut fonctionner. C'est juste un à-priori de ma part, que c'est une source potentielle de bug (si un joueur se comporte d'une manière que t'as pas 100% prévue.) Après, je sais pas dans quel souci vous en êtes arrivés à cette solution. Je peux me tromper.

Citation :
J'ai créé un Gui, gGui1, mais je n'arrive pas à l'afficher:

gGui1.Visible=true;

Il semble qu'il faut le définir dans General Settings : Text output : Custom text-window GUI
Et donner le n° ID du GUI que t'as créé.
Revenir en haut Aller en bas
Clique
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue
Clique


Nombre de messages : 106

Date d'inscription : 11/05/2022


Sauvegarde F5/F7 Empty
MessageSujet: Re: Sauvegarde F5/F7   Sauvegarde F5/F7 EmptyVen 1 Déc 2023 - 17:40

Citation :
En plus, je préfèrerais mettre un objet que je pourrais afficher en fondu.

Le problème que ça te poserait, c'est que ces objets sont relatif à une Room, alors que tu as besoin d'une fonction globale. C'est la particularité des GUI, et dialogues, c'est global tout au long du jeu, t'as pas besoin de le refaire à chaque Room.
Revenir en haut Aller en bas
Gob
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue
Gob


Nombre de messages : 108

Date d'inscription : 08/10/2021


Sauvegarde F5/F7 Empty
MessageSujet: Re: Sauvegarde F5/F7   Sauvegarde F5/F7 EmptyVen 1 Déc 2023 - 20:15

Ok, merci pour tes réponses ! Ags est génial mais c'est la croix et la bannière pour juste afficher un texte. Avec un perso c'est jouable mais quand même galère pour ça. Un objet, non. Je ressayerais avec un GUI, si j'arrive à l'afficher... Mais j'aimerais bien devenir à l'aise avec les GUI, ça peut m'être utile. Ou avec Display... Tchao Pierre
Revenir en haut Aller en bas
Gob
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue
Gob


Nombre de messages : 108

Date d'inscription : 08/10/2021


Sauvegarde F5/F7 Empty
MessageSujet: Re: Sauvegarde F5/F7   Sauvegarde F5/F7 EmptyJeu 28 Déc 2023 - 10:42

Bon ben... je n'arrive pas à afficher mon GUI, suite à F5.

Code:

SaveGameSlot(20, "save game");
gGui1.Visible=true;
open_gui (gGui1);
Wait(30);
close_gui(gGui1);

Ca a l'air pourtant simple... Tu me dis:

Il semble qu'il faut le définir dans General Settings : Text output : Custom text-window GUI
Et donner le n° ID du GUI que t'as créé.

Mais ça ne change rien.
Revenir en haut Aller en bas
squale
Cliqueur Amateur
Cliqueur Amateur
squale


Nombre de messages : 386

Age : 43

Localisation : strasbourg

Date d'inscription : 04/01/2009


Sauvegarde F5/F7 Empty
MessageSujet: Re: Sauvegarde F5/F7   Sauvegarde F5/F7 EmptyJeu 28 Déc 2023 - 12:50

Ce ne serait pas par hasard l'espace qui cause le problème ?
open_gui (gGui1);

Ca ne devrait pas être plutôt :
open_gui(gGui1);
Revenir en haut Aller en bas
http://www.construct-french.fr
Gob
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue
Gob


Nombre de messages : 108

Date d'inscription : 08/10/2021


Sauvegarde F5/F7 Empty
MessageSujet: Re: Sauvegarde F5/F7   Sauvegarde F5/F7 EmptyJeu 28 Déc 2023 - 13:25

Hello, merci pour ta réponse, mais ça ne change rien.
Revenir en haut Aller en bas
Clique
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue
Clique


Nombre de messages : 106

Date d'inscription : 11/05/2022


Sauvegarde F5/F7 Empty
MessageSujet: Re: Sauvegarde F5/F7   Sauvegarde F5/F7 EmptyVen 29 Déc 2023 - 9:09

Gob a écrit:
Bon ben... je n'arrive pas à afficher mon GUI, suite à F5.
(..)
Clique a écrit:
Il semble qu'il faut le définir dans General Settings : Text output : Custom text-window GUI
Et donner le n° ID du GUI que t'as créé.
(..)

Pardon, je me suis mal fait comprendre.
Ce dont je faisait allusion (à définir dans les settings) c'est quel GUI est utilisé par la fonction Display()

Comme dans l'exemple initial que j'avais proposé :
Code:
  else if (keycode == eKeyF5)
  {
    // F5 will prompt to save a game
    SaveGameSlot(1, "save game");
    Display("Jeu sauvegardé.");
  }

Et comme tu me l'as fait remarquer, cette fonction produit un rectangle jaune et moche... confus
Après t'es parti sur les GUI, et j'ai cru que tu savais où tu allais (enfin je veux dire : savais mieux que moi)

En fait de ce que je comprends, la fonction Display("un quelconque texte") fait d'elle même appel à un GUI, par défaut défini comme un rectangle jaune moche.

Ce que j'aurais fait dans cette situation, c'est plutôt de faire des essais de modifier ce GUI là, plutôt que d'en créer un autre. C'est à dire : essayer d'enlever/changer la couleur de fond et/ou la bordure pour un truc qui te conviens (mais j'ai pas encore compris comment ça fonctionne, je m'attendais à un truc plus simple).

Mais (bref) si tu sais comment en créer un, ce que je voulais dire, c'est que tu peux remplacer le GUI d'origine (jaune-moche) par le tiens, tu n'as qu'à définir le tiens dans les settings. Et là si ton nouveau GUI est bien compatible, tu n'as rien à changer dans le code (seulement l'indiquer dans les settings). Dans le code, tu n'as qu'à utiliser la fonction Display("Jeu sauvegardé.").
DOnc, tu n'aurais pas à faire appel à
Code:
gGui1.Visible=true;
open_gui (gGui1);
Wait(30);
close_gui(gGui1);
Mais juste :
Code:
Display("Jeu sauvegardé.");

Mais malgré ça, j'avais cru comprendre que ça ne te convenais pas non-plus parce que Display() bloque et exige un clic pour faire disparaître le message et débloquer.
Revenir en haut Aller en bas
Clique
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue
Clique


Nombre de messages : 106

Date d'inscription : 11/05/2022


Sauvegarde F5/F7 Empty
MessageSujet: Re: Sauvegarde F5/F7   Sauvegarde F5/F7 EmptyVen 29 Déc 2023 - 9:18

C'est de ce GUI là qu'il s'agit : http://admin.no.uchi.free.fr/dokuwiki-2008-05-05/doku.php?id=editer_les_guis#fenetres_de_texte_personnalisees
Et à voir la doc, j'ai l'impression que la forme impose un cadre (bordure) et un fond..

C'est pour ça que je proposait comme autre solution (simple, sans GUI) d'utiliser SayAt() au lieu de Display().

Clique a écrit:
Peut-être que le plus simple (pour ne pas avoir à bricoler un GUI), ce serait d'utiliser ça (à la place de la fonction Display) :
Code:
cEgo.SayAt(220, 20, 100, "My name is ego");

À savoir, un dialogue de personnage.
Dans l'ordre des arguments : position X, position Y, texte.
Si t'as besoin de distinguer l'aspect du texte, d'un dialogue du personnage principal, tu peux en créer un Character qui serait exclusivement dédié à ça (pas besoin de lui créer un nom ou des sprites...). Tu changes sa propriété "SpeechColor" par celle qui te conviens.
Et dans le script global : (vérifie sa propriété Design : ScriptName, ici cChar1)
Code:
cChar1.SayAt(10, 280, 200, "Jeu sauvé, F7 pour recharger");
Revenir en haut Aller en bas
Gob
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue
Gob


Nombre de messages : 108

Date d'inscription : 08/10/2021


Sauvegarde F5/F7 Empty
MessageSujet: Re: Sauvegarde F5/F7   Sauvegarde F5/F7 EmptyVen 29 Déc 2023 - 12:25

Ok, merci. Je renonce à SayAt parce qu'il a tendance à le mettre hors champ, sans tenir compte des coordonnées, je ne comprend pas pourquoi. Donc j'utilise un perso invisible normal:

[code=ags]
cPersoInvisible.x=200; cPersoInvisible.y=15;
aInvisible01.Play(eAudioPriorityHigh, eRepeat);
cPersoInvisible.Say("Jeu sauvé. Pressez F7[pour recharger.");
aInvisible01.Stop();
[/code]

Ca marche dans un niveau, mais pas dans les autres, où il affiche le texte au milieu. Je voudrais que ce soit toujours en haut. Mes niveaux ont des tailles différentes. Je ne comprend pas pourquoi il n'arrive pas à tenir compte des coordonnées dans les autres niveaux...
Revenir en haut Aller en bas
Gob
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue
Gob


Nombre de messages : 108

Date d'inscription : 08/10/2021


Sauvegarde F5/F7 Empty
MessageSujet: Re: Sauvegarde F5/F7   Sauvegarde F5/F7 EmptyVen 29 Déc 2023 - 13:11

Bon ben ça marche à peu près comme ça. Il faut juste absolument mettre les coordonnées du perso au lancement de chaque niveau. Bonne année !
Revenir en haut Aller en bas
Clique
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue
Clique


Nombre de messages : 106

Date d'inscription : 11/05/2022


Sauvegarde F5/F7 Empty
MessageSujet: Re: Sauvegarde F5/F7   Sauvegarde F5/F7 EmptyVen 29 Déc 2023 - 16:53

J'ai fait un test et trouvé quelque chose qui fonctionne (même si je pense qu'il y a moyen de faire plus simple encore)

Tu peux télécharger mon dossier ici : https://host.patatoide.com/ags/AGS-TEST_save-f5-f7.zip
Fait avec AGS 3.6 (p7)

En résumé :

1) J'ai créé 3 GUI, un pour chaque message : gMsgSave, gMsgNoSave, gMsgLoad
2) J'ai créé 3 sprites pour chacun des ces 3 textes (parce que ... ) : sauvegardé / sauvegarde chargée / pas de sauvegarde

3) Config des GUI :
Sauvegarde F5/F7 Ags-te10

Pour la plupart des propriétés, j'ai mis les mêmes que gActionBar,
- sauf pour la disposition (la taille et position dans l'écran).
- pour l'image d'arrière-plan, j'ai mis un de mes sprites : sauvegardé / sauvegarde chargée / pas de sauvegarde
- et la propriété Visible initialisée à False

Possible amélioration : Je pense qu'on peu simplifier à un seul GUI, et utiliser un "label" au lieu de 3 sprites. Mais bon, je me suis pas cassé la tête.

4) Le code dans le Global script, sur l'utilisation des touches F5 / F7
Code:
// called when a key is pressed
function on_key_press(eKeyCode keycode, int mod) {
   // check for Escape first, so it can be used on GUIs that pause the game
   if (keycode == eKeyEscape) {
      //Tout un tas de choses
      // ...
   }
   else if (keycode == eKeyF5) {
      // F5 will prompt to save a game
      SaveGameSlot(1, "osef save game");
      iMsgDisplay = 40;
      open_gui(gMsgSave);
      close_gui(gMsgNoSave);
      close_gui(gMsgLoad);
   }
   else if (keycode == eKeyF7) {
      // F7 will prompt to save a game
      String description = Game.GetSaveSlotDescription(1);
      
      if(description == "osef save game") { // Il y a une sauvegarde dans le slot 1
         RestoreGameSlot(1);
         iMsgDisplay = 40;
         open_gui(gMsgLoad);
         close_gui(gMsgSave);
         close_gui(gMsgNoSave);
      }
      else { // Il n'y a pas de sauvegarde dans le slot 1
         iMsgDisplay = 40;
         open_gui(gMsgNoSave);
         close_gui(gMsgSave);
         close_gui(gMsgLoad);
      }
   }
   // D'autres conditions d'autres interactions de touches...
   // ...
}

Dans le détail :

ligne 10 : SaveGameSlot(1, "osef save game");
Note que le nom que je donne à la sauvegarde va avoir son importance après.

ligne 11 : iMsgDisplay = 40;
C'est un compteur qui correspond au nombre de cycles où le GUI restera afiché (j'y reviens après)

ligne 12~14 : open_gui(gMsgSave); close_gui(gMsgNoSave); close_gui(gMsgLoad);
J'affiche le GUI voulu et masque les 2 autres.
C'est pas toujours nécessaire, mais comme ça je suis sûr qu'ils ne se superposeront jamais.

ligne 20 : if(description == "osef save game") {
C'est seulement si un nom de sauvegarde est renvoyé et qu'il correspond au même nom que j'ai mis à la ligne 10. (si c'est une sauvegarde faite avec F5)
J'avais codé ça autrement avant, mais ça a crash...

Donc, juste avec ça : quand on appuie sur F5 ou F7 les GUI s'affichent, se remplacent.
Mais pour qu'ils s'enlèvent automatiquement au bout d'un délai (celui que j'ai mis à iMsgDisplay) il faut ajouter ça dans la boucle du cycle :
Code:
int iMsgDisplay = 0;
// called on every game cycle, even when the game is blocked
function repeatedly_execute_always()
{
  if(iMsgDisplay > 0){
    iMsgDisplay = iMsgDisplay -1;
  }
  else{
    gMsgLoad.Visible = false;
    gMsgSave.Visible = false;
    gMsgNoSave.Visible = false;
  }
}

Donc j'initie la variable iMsgDisplay à zéro.
À Chaque cycle, si iMsgDisplay est > 0, je réduit de 1. Et quand il tombe à zéro, je masque les 3 GUI (qu'importe lequel était éventuellement affiché).
Normalement, dans la cadence par défaut, 40 cycles (ou ticks) correspond à 1 seconde. C'est le même principe que les timers.

---

Remarque sur tes essais précédents :
Code:
SaveGameSlot(20, "save game");
gGui1.Visible=true;
open_gui (gGui1);
Wait(30);
close_gui(gGui1);

T'as pas besoin de faire gGui1.Visible=true; ET open_gui (gGui1);
La fonction open_gui() s'en charge déjà elle-même :
Code:
// open a GUI
function open_gui(GUI* gui_to_open)
{
  TwoClickHandler.Close();
  mouse.UseModeGraphic(eModeWalkto);
  gui_to_open.Visible = true;
}

// hide a GUI
function close_gui(GUI *gui_to_close)
{
  gui_to_close.Visible = false;
  mouse.UseDefaultGraphic();
}

En réalité ton code fonctionne, mais il ne fonctionne pas comme tu le veux.
Faut comprendre que tout le code du Global script est exécuté 1 fois, à chaque cycle. Dans un autre topic je t'avais listé les étapes d'un cycle :
https://adventuregamestudio.1fr1.net/t3216-animations-lancees-dans-le-fond-pendant-le-jeu#48143

Le truc à comprendre (c'est commun à beaucoup de langages/script). D'abord le code est exécuté, et le rendu graphique est fait après.
Donc si tu fais :
Code:
open_gui (gGui1);
Wait(30);
close_gui(gGui1);

En gros, tu dis d'afficher le GUI, puis bloque le script un moment, puis dit de masquer le GUI.
Et après ça, à l'étape de rendu graphique, il est dit de masquer le GUI, donc il s’affichera pas.

Mais ce que tu veux c'est l'afficher pendant 30 ticks, avant de le masquer, mais si tu bloque le cycle entre-deux, alors il ne sera jamais affiché. (Il n'y a pas de mise à jour graphique entre "open_gui" et "close_gui", seulement à la fin du cycle)

La fonction Wait est censée faire ça correctement, mais la doc précise que ça ne fonctionne pas dans repeatedly_execute_always() et late_repeatedly_execute_always(), et je pense aussi que ça ne doit pas fonctionner dans le script global.
https://adventuregamestudio.github.io/ags-manual/Globalfunctions_Wait.html

J'imagine que cette fonction ne peut fonctionner que dans des cas particuliers : des sous-scripts, dialogues, cut-scenes... (Je connais pas précisément)

D'où mon truc de créer un compteur iMsgDisplay, et gérer séparément l'affichage et le masquage. (c'est pas une bidouille).
Revenir en haut Aller en bas
Gob
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue
Gob


Nombre de messages : 108

Date d'inscription : 08/10/2021


Sauvegarde F5/F7 Empty
MessageSujet: Re: Sauvegarde F5/F7   Sauvegarde F5/F7 EmptyMar 2 Jan 2024 - 10:08

Hello, merci pour tout, j'ai pris connaissance de ton fichier et de tes explications. Pour la question des SaveF5/F7, j'en reste à la solution du perso transparent mais je mets ton dossier de coté pour quand je voudrais faire GUI, ce qui se posera un jour. Tchao PG
Revenir en haut Aller en bas
Clique
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue
Clique


Nombre de messages : 106

Date d'inscription : 11/05/2022


Sauvegarde F5/F7 Empty
MessageSujet: Re: Sauvegarde F5/F7   Sauvegarde F5/F7 EmptyMar 2 Jan 2024 - 19:26

Pas de soucis.
J'ai vu un autre truc qui pourrait aussi marcher sans nécessiter de GUI ou dialogue, c'est l'objet Overlay :
https://adventuregamestudio.github.io/ags-manual/Overlay.html#overlay-functions-and-properties

Il peut être relatif à la Room, ou bien à l'écran.
J'ai pas été dans le détail, ni testé, mais si quelqu'un reprends ce topic je lui recommande de tester ça.
Revenir en haut Aller en bas
Contenu sponsorisé





Sauvegarde F5/F7 Empty
MessageSujet: Re: Sauvegarde F5/F7   Sauvegarde F5/F7 Empty

Revenir en haut Aller en bas
 
Sauvegarde F5/F7
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Faire une sauvegarde
» Système de sauvegarde...
» [résolu]Récupération/sauvegarde/exportation zones décors?
» Un label Scrollable où serait sauvegardé tous les textes du jeu ?
» [résolu] probleme regions et sauvegarde

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: