Basé sur le menu A Simple Pause de Gnome, voici un tutoriel plus complet.
Il y a pas mal de choses à ne pas oublier, comme nous le verrons plus loin!
Créer un sprite de pause
A l'aide d'un programme de dessin tel que Photoshop, Gimp ou Inkscape, créez votre sprite "Pause".
L’utilisateur doit également savoir quoi faire pour revenir au jeu. Vous devez donc intégrer un texte d’aide en dessous, du type "Appuyez sur la touche P pour continuer" dans l’image-objet ou dans une zone de texte.
Enregistrez-le en tant que fichier .png.
Charger le sprite en pause dans Construct 2
J'ai implémenté la fonction Pause dans le jeu de tir Ghost (voir le guide du débutant d' Ashley).
Vérifiez que le calque HUD est actif (astuce: verrouillez les autres calques). De cette façon, la parallaxe est 0,0 et le bouton de pause apparaîtra toujours à un endroit.
Double-cliquez sur la mise en page, insérez votre sprite et positionnez-la au centre de l'écran dans le quadrant supérieur gauche de la taille de la mise en page (basculez la visibilité du calque d'arrière-plan pour afficher la taille de la fenêtre, dans ce cas 640x480 et non 1280x1024!).
[b
]Pause Sprite Properties
Dans le panneau des propriétés:
- définit son "Nom" sur pauseButton
- définir "Visibilité initiale" sur invisible (vous pouvez également accéder à la feuille d'événement et la rendre invisible au début de la présentation )
- ajouter une nouvelle variable d'instance appelée isPaused , type booléen et valeur initiale à false
Événements
Allez à la fiche de l'événement.
Créez un nouvel événement pour le clavier:
Ajouter une condition Clavier -> Sur touche enfoncée -> P
Aucune action requise pour l'instant.
Cliquez avec le bouton droit sur la flèche verte à gauche de la condition, allez à Ajouter et choisissez Ajouter un sous-événement .
Add condition pauseButton -> Est-ce que la variable d'instance booléenne est définie -> isPaused
Donc, cela vérifiera que si la touche 'P' a été pressée, vérifiez la valeur booléenne de la variable isPaused . Puisque la valeur initiale est "false", nous devrions inverser la condition en cliquant avec le bouton droit de la souris sur la condition Is isPaused et en choisissant inverser .
Désormais, les actions seront activées si la touche 'P' a été cliquée et si la valeur booléenne de isPaused est false.
Ajoutez les actions suivantes:
- pauseButton -> Set boolean -> isPaused to True
- Système -> Définir l'échelle de temps -> 0
- pauseButton -> Définir visible -> Visible
- Texte -> Définir le texte -> "Appuyez sur 'P' pour continuer"
Alors qu'est-ce qui va arriver?
Tout gèle: joueur, balles, monstres et explosions dues à une échelle de temps = 0
Le bouton Pause est maintenant visible et le texte du score devient Presser «P» pour continuer.
De plus, la variable booléenne isPaused est maintenant vraie
Pour continuer à jouer, nous devons ajouter une autre condition.
Cliquez avec le bouton droit sur la gauche du sous-événement pauseButton - Is isPaused et ajoutez une condition "Else".
Ajoutez les actions suivantes:
- pauseButton -> Set boolean -> isPaused to False
- Système -> Définir l'échelle de temps -> 1.0
- pauseButton -> Définir visible -> Invisible
- Texte -> Définir le texte -> "Score:" & Score
Ainsi, si le jeu est en pause, les actions ci-dessus ne seront exécutées que si la touche 'P' a été enfoncée et que la variable isPaused est à True.
Tout commence à bouger et à exploser, le bouton Pause est supprimé et les informations de score s'affichent à nouveau.
Problème 1: le jeu peut être suspendu après la mort du joueur
J'ai remarqué que vous pouvez mettre le jeu en pause même après la mort du joueur.
Il est donc logique de donner également au joueur une variable d'instance de santé et de ne suspendre la partie que s'il est encore en vie!
Allez dans la zone de présentation, cliquez sur l'image-objet Player, ajoutez dans le panneau Propriétés une variable d'occurrence appelée santé avec une valeur de 1. La construction ne confondra pas les variables de santé des monstres individuels et du joueur.
Dans la fiche de l'événement, accédez à la condition Monster -> En cas de collision avec le joueur et ajoutez l'action suivante:
Player -> Soustraire de -> santé -> 1
s1.construct.net/images/v680/uploads/articleuploadobject/0/images/14502/scirra_tut_pause_2.jpg
Dans notre nouvel événement clavier créé, ajoutez la condition suivante après
Clavier - Appuyez sur P en cliquant dessus avec le bouton droit de la souris et ajoutez un événement supplémentaire
Player -> Comparer les variables d'instance -> santé -> Supérieur à -> 0
s1.construct.net/images/v680/uploads/articleuploadobject/0/images/14503/scirra_tut_pause_3.jpg
Problème 2: la souris est toujours active
Une autre chose que j'ai découverte en mettant le jeu en pause:
a) Le joueur tourne toujours vers l'angle de la souris
b) Le joueur peut toujours tirer!
La solution consiste à ajouter la condition pour vérifier que la variable booléenne pauseButton est isPaused to
a) Système -> Chaque tick -> Player -> Définir l'angle vers -> Mouse.X, Mouse.Y
s1.construct.net/images/v680/uploads/articleuploadobject/0/images/14504/scirra_tut_pause_4.jpg
b) Souris -> Sur le bouton gauche cliqué -> Joueur -> Balle de réapparition
s1.construct.net/images/v680/uploads/articleuploadobject/0/images/14505/scirra_tut_pause_5.jpg
N'oubliez pas d'inverser la condition (voir le 'x' rouge)!
Maintenant, lorsque le jeu est en pause, le joueur ne tourne plus et ne peut plus tirer.
Conclusion
Donc, vous voyez ce qui doit être fait dans le cas où un nouveau menu ou une nouvelle fenêtre est appelée
1. Vérifiez les conditions du clavier et de la souris et congelez-les si nécessaire
2. Vérifiez ce que font les autres objets pendant la pause
3. Vérifiez le temps en cours
Ta-daa !!! :-)