Une scène basique.
But : Vous pourrez via ce tutorial savoir créer une simple scène en Ruby pour votre jeu.
Vous devez savoir :
- Une fenêtre basique.
1) La classe.
La scène en RGSS
permettra de mettre vos fenêtres ainsi que l'interaction du joueur. Notre scène aura 2 méthodes : "main" et "update". Pourquoi pas "initialize" ? Je vais vous expliquer dans le prochain paragraphe, ce qu'est vraiment une scène ;)Voici la structure de notre classe :
2) La théorie de la scène !
Pour bien savoir ce qu'est une scène, nous allons l'imager.
Imaginez vous sur une pièce de théâtre. A chaque fois vous avez une scène : une se passe dans le cadre d'une maison, l'autre à la boulangerie ...etc. Mais pas tous à la fois ! Ici, nous allons appelez "Théâtre" la variable globale qui se trouve dans RGSS
:$scene est un objet, il aura chaques scènes mais comme le théâtre, il aura une scène à la fois. Pour cela, allons faire un tour dans le script "Main". $scene va prendre sa première valeur dès qu'on exécute le jeu :
Ainsi, dès qu'on commence le jeu, la scène du théâtre est "Scene_Title", c'est à dire, l'écran titre. Mais votre écran titre ne s'affiche pas à ce moment là ! On a juste mis une scène dans la variable $scene ! Rappelez vous ... quand on appelle une classe, "initialize" est appelé automatiquement (puisque c'est le constructeur) mais là ...il n'y a pas de "initialize" chez nos scènes (souvent). C'est à ce moment précis qu'intervient les lignes suivantes :
Sans ces lignes fatidiques, votre jeu ne se déroulera pas ^^. La boucle "while" s'arrêtera seulement si $scene vaut nil, donc que le fameux théâtre est fini ... donc plus de scène. Mais là, ce n'est pas le cas puisque nous scène est l'écran titre donc on rentre dans la boucle et on appelle la méthode "main" de notre scène.
Vous avez compris pourquoi notre scène à toujours un "main" ;)
3) La méthode "main"
Revenons à nos moutons. Nous avons fait la structure de notre classe et maintenons, nous allons mettre les instructions dans la méthode "main". "main", si vous voulez, est un peu comme "initialize". On va initialiser nos variables, mettre les fenêtres, les images ...etc.
Pour commencer, nous allons initialiser notre fenêtre (voir "Une fenêtre basique.") :
Maintenant, on va mettre la mise à jour l'entrée (clavier ...) et sortie (Graphismes, audios ...) de notre scène. Voici les lignes de codes à mettre à chaques fois dans votre scène :
Nous allons expliquer cela.
a) Graphics
Au théâtre, le rideau est fermée avant de commencer une scène. Derrière le rideau, vous mettez tout en place mais sur la scène, il n'y a pas un chat, pas un mouvement ... il faut ouvrir le rideau du théâtre pour commencer à voir les comédiens à jouer. Ensuite, quand on change de scène, on ferme le rideau ainsi de suites ...
Ici, c'est la même chose ^^. Le fameux code ci-dessus fait comme au théâtre :
Au départ, notre scène est gelée ( = rideau fermée) ... on ne peut pas faire bouger quoi que ce soit mais dans "main" on a initialisé les fenêtres ( = préparatif derrière le rideau). Pour commencer à jouer, on applique une transition ce qui va dégelée la scène (= on enlève le rideau) avec :
Ensuite, on mets à jour les entrées (clavier ...) et sorties (Graphismes, audios ...) de la scène dans une boucle infinie (= les comédiens jouent la scène de théâtre) :
La méthode "update" est la méthode que l'on va créé après.
Ensuite, quand on change de scène, on sort de la boucle et on géle à nouveau l'écran (= on ferme le rideau)
Après avoir gelé l'écran avec "Graphics.freeze" et seulement après , vous enlevez tout ce qu'il y a sur la scène :
De cette manière, la fenêtre est supprimé quand on change de scène.
Voici le récapitulatif de la méthode "main" :
2) La méthode "update".
Tellement que notre scène est basique que nous aurons qu'une ligne à écrire. Mais dans un script plus développé, vous aurez plus de ligne à mettre ;).
"udpate", rappelez vous, a été appelé dans notre boucle infinie dans le code ci-dessus. Ainsi, tant qu'on ne change pas de scène, cette méthode est appelée continuellement. Bref, très important pour mettre à jour constamment notre scène. Ici, on n'a qu'à mettre à jour la fenêtre :
Toute fenêtre doit être mise à jour avec "update".
3) Notre scène complète.
Voici donc le code au complet de notre scène créée :
4) Appeler la scène.
Evidemment, faire une scène c'est bien mais l'afficher c'est mieux. D'où vient la question : comment appeler notre scène. En donnant à la variable $scene (qu'on a nommé "Théâtre") notre nouvelle scène :
Vous pouvez l'essayer via un évènement grâce à la commande "Insérer un script". Vous allez remarquer un changement de scène avec une fenêtre dans ce dernier.
5) Quand $scene n'a plus de valeur.
Mais que ce passe t-il si $scene vaut nil, bref que $scene n'a plus de valeur ? Revenons dans le script "Main". Reprenons le code :
Si $scene vaut nil, on quitte la boucle. Donc on appelle plus la méthode "main" de la scène donc on appelle plus de scène tout court :p
Ensuite, le script "Main" va dégelé l'écran avec une transition (oui, car en sortant d'une scène, on l'a gelée) :
Note : le paramètre "20" est le temps (en frame) de la transition.
Ensuite, puisque il n'y a plus de script ni de code ... le jeu s'arrête.
Note : Après la transition, il y a quelques lignes de codes mais seulement une exception qui intervient seulement quand un fichier est introuvable dans les scènes.
6) Le fameux "Mettre le script au dessus de Main "
Vous avez déjà sûrement entendu cela, n'est ce pas ? Rien que dans les scripts partagés sur ce site, on fait remarqué que le script doit être mis au dessus de Main et non au dessous. Pourquoi ?
Maintenant que vous avez compris ce qu'est une scène ainsi que le déroulement de "Main", vous êtes capable de me répondre. Ruby exécute les scripts de haut en bas dans l'éditeur. Ainsi quand il arrive à "Main", il fait tout de suite la boucle "while" et éxécute les scènes dans les scripts plus haut. Seulement voilà ... puisque Ruby reste dans la boucle "while", Ruby n'a pas analysé (ou inclus) les autres scripts en dessous de Main. Du coup, si vous mettez une scène en dessous de Main, ça revient à ne pas le lire.
Alors, tout les scripts doivent au dessus de "Main" ?
Pour les scènes, oui. Mais pas forcément pour tout les scripts. Ruby exécute les scripts en dessous de "Main" seulement quand la boucle "while" dans "Main" est terminée donc quand $scene = nil. Ainsi, si vous voulez mettre un message "d'en revoir" au joueur quand il quitte le jeu, vous pouvez mettre le script en dessous "Main".
Page vue 7087 fois | Auteur : Samarium

