[Event] Les interrupteurs : de la théorie à la pratique

Voir le sujet précédent Voir le sujet suivant Aller en bas

[Event] Les interrupteurs : de la théorie à la pratique

Message par garsim le Sam 27 Mar - 8:28

  • Support : RM toutes versions
  • Sujet abordé : Interrupteurs en event
  • Niveau : Facile


Les interrupteurs

Par garsim



Ce qui est souvent difficile à assimiler pour un débutant, lorsqu'il débarque sur RPG Maker, c'est sans doute les variables et les switches (les interrupteurs en bon français), car il peut ne pas comprendre à quoi ça sert, et comment s'en servir.
Pourtant, les interrupteurs sont très utiles. Pourquoi ? C'est ce qu'on va voir au travers de deux paragraphes, l'un théorique sur la notion de booléens (brr... terrifiant comme nom, hein ? Twisted Evil ) puis un pratique sur les interrupteurs, plus axé sur RPG Maker.



I - Les booléens en théorie

a) Dis tonton, c'est quoi un interrupteur ?

Tout d'abord, commençons par définir une variable : d'après le nom, on peut s'attendre à quelque chose qui varie.
Plus concrètement, supposons un tiroir dans lequel on ne peut mettre qu'une seule chose. On pourrait y mettre le chiffre 1, le chiffre 2, le nombre 33, etc.
Eh bien on pourrait dire que notre tiroir, c'est une variable, car il ne peut contenir qu'une chose, mais son contenu varie.
Par exemple, supposons qu'on y mette de la monnaie, 50 € par exemple. Notre tiroir compterait alors de la monnaie, et notre variable aurait alors une valeur de 50.

On prend de l'argent pour aller faire les courses. Supposons qu'on en ait pour 10 € de courses, on pourra remettre 40 € dans le tiroir. Notre variable aura alors une valeur de 40.
(bon, ce n'est pas vraiment la définition d'une variable, mais un exemple pour essayer de visualiser ce que c'est)

Et maintenant, nous allons pouvoir en venir à la définition d'un interrupteur.
Si j'ai défini ce qu'était une variable avant, c'est parce qu'un interrupteur est... une variable de type booléenne !

Et maintenant que nous avons défini ce qu'était une variable, il manque encore la définition d'un booléen...


b) Les booléens

Ce paragraphe a simplement un intérêt théorique que vous pouvez sauter si vous n'êtes pas intéressés. Il n'est pas forcément nécessaire pour bien comprendre ce qu'est un interrupteur, mais il pourra vous servir si vous débutez dans un langage de programmation comme le C / C++.
Pour un utilisateur de RPG Maker, tout ce qu'il faut retenir, c'est la définition d'un interrupteur : c'est une variable qui ne peut prendre que deux valeurs, ON et OFF.


Ce qu'il faut retenir des booléens, c'est qu'ils ne prennent que deux valeurs : TRUE et FALSE (VRAI et FAUX en français).
En fait, ça pourrait être notre tiroir, mais qui ne pourrait contenir que deux choses possibles. Par exemple, supposons que vous ayez deux montres, une noire et une blanche. Comme vous en portez une tous les jours, l'autre restera forcément dans le tiroir... et lorsque vous voudrez en changer, il y en aura toujours une dans le tiroir.
Et si vous ne portez pas de montre... soyez imaginatifs, que diable. XD

Leur intérêt principal est qu'ils interviennent lorsqu'on fait des conditions (ou des boucles, mais on n'en parlera pas ici).
Lorsque vous faites une condition, ce sera quelque chose dans ce genre :
SI la condition est vraie
-> ALORS fais ceci
-> SINON fais cela

On pourrait prendre un exemple avec une variable "monnaie" qui définisse la monnaie que vous possédez :
SI vous avez plus de 9 000 €
-> ALORS vous pouvez acheter cette voiture
-> SINON mettez-vous au vélo

"La condition est vraie" et "Vous avez plus de 9 000 €" sont des tests booléens.
Ce qui signifie qu'on les teste et qu'on détermine leur "degré de vérité".

Par exemple, "Vous avez plus de 9 000 €" est vrai si... vous avez plus de 9 000 € (terriblement logique, n'est-ce pas ? Razz ).
Et "La condition est vraie" est vraie si... la condition est vraie (bon, vous m'aurez compris :lol: ).

En fait, à chaque fois, ça peut être soit VRAI, soit FAUX. Il n'y a pas d'autre possibilité.


c) Et RM dans tout ça ?

Même si ce que j'ai dit était valable pour la plupart des langages de programmation, ce n'est cependant pas complètement dénué d'intérêt sur RM.
En effet, on y retrouve des tests booléens là encore, essentiellement dans les conditions. Par exemple, demandez à faire une condition sous RM.

Pour ceux qui ne sauraient pas vraiment le faire, accédez d'abord à la couche événementielle (le bouton approprié sur RM, et en raccourcis clavier, F7 sous 2003, F8 sous XP) et faites un event.



On peut alors trouver des conditions dans ce qui apparaît :



- Le bloc Conditions de l'événement : comme son nom l'indique, ce sont des conditions nécessaires au déclenchement de l'événement. Si vous cochez une case, vous pourrez alors préciser une condition via un test. Vous pouvez aussi en cocher plusieurs pour que plusieurs conditions soient nécessaires.
- La fenêtre Conditions : comme il s'agit d'une commande, faites un clic-droit sur le bloc "Commandes de l'événement" (ou cliquez dessus et appuyez sur Entrée) et choisissez "Conditions...". Vous avez alors le choix parmi plusieurs conditions.



Chaque condition propose un test booléen, qui vaudra "Vrai" si la condition est vérifiée ou "Faux" sinon.
Vous pourrez alors décider ce qui se passera si le test sera Vrai ou Faux.


d) Et les interrupteurs dans tout ça ?

On y arrive, on y arrive.
Les interrupteurs sont justement un moyen de réaliser des tests booléens, puisque ce sont des variables booléennes !
Ils ne peuvent prendre que deux valeurs : Vrai ou Faux. On dira aussi sous RM Activé ou Désactivé, ou encore ON ou OFF.
Si vous avez une condition faisant intervenir un interrupteur, elle sera vraie si l'interrupteur est activé, et fausse si ce n'est pas le cas.


Bon, la théorie, c'est bien beau, mais la pratique, c'est mieux (et surtout moins assommant Razz ). Allons-y donc.



II - Les interrupteurs en pratique

Les exemples et screenshots seront réalisés sous rmXP, mais les manipulations sont sensiblement identiques pour les autres versions de RM.

a) Où trouver des interrupteurs ?

D'abord, trouvons les interrupteurs, sinon on ne pourra pas les utiliser ^^.

Pour ça, créez d'abord un événement.
Ajoutez une nouvelle instruction, et accédez à la gestion des interrupteurs. Vous devriez avoir cette fenêtre sous vos yeux :



- Interrupteurs à modifier : indique le ou les interrupteurs que vous voulez modifier. Cochez l'option qui vous intéresse. Si vous cliquez sur la petite flèche, vous avez un inventaire qui s'affiche :



Vous pouvez donner des noms aux interrupteurs, ce sera beaucoup plus pratique pour ne pas se perdre par la suite.
Pour ça, cliquez sur l'interrupteur qui vous intéresse, allez dans la fenêtre "Nom" et donnez-lui un nom. Faites "OK" pour sauvegarder et sélectionner l'interrupteur.

- Nouvel état : indique la valeur que va prendre l'interrupteur. Ce sera soit "Activé", soit "Désactivé". Cochez l'option qui vous intéresse.
Par défaut, tous les interrupteurs sont désactivés.

NB : si vous utilisez RM 2003, il y a aussi "Inverser état" qui fait passer un interrupteur activé à désactivé et vice-versa. Mais elle a disparu de RM XP. On peut cependant arranger ça avec des conditions dans ce style :



Maintenant que nous savons créer un interrupteur, voyons maintenant comment l'utiliser !


b) Des exemples

Ce sera plus concret d'utiliser des exemples pour expliquer l'intérêt des interrupteurs.

- Qui a éteint la lumière ?

Un petit exemple amusant : chez vous, vous utilisez bien les interrupteurs pour allumer/éteindre la lumière non ? Alors pourquoi pas dans un jeu ?
Faisons d'abord un événement. Ensuite, accédons aux commandes, puis mettons-y des instructions :



Bon, en fait, pas mal de choses sont superflues, et seul l'interrupteur compte. Les commentaires sont d'ailleurs là pour vous expliquer l'intérêt des différentes instructions.

Testez. Qu'est-ce qu'on a ?
Eh bien la scène se retrouve dans l'obscurité. C'était bien notre intention, mais on a un problème : lorsqu'on appuie de nouveau sur l'interrupteur, celui-ci nous propose... d'éteindre la lumière, alors qu'elle est déjà éteinte et qu'on voudrait la rallumer !

Pas de panique, on va arranger ça. Ajoutez une deuxième page à votre événement :



Qu'est-ce qui change par rapport à la première page ?
- les conditions de l'événement : on a coché une condition "Interrupteur" et mis l'interrupteur qui nous intéresse. Cela permet de détecter le fait que la lumière soit éteinte, et on nous proposera alors de la rallumer.
- l'interrupteur : dans les commandes, on l'a désactivé. Comme ça, la prochaine fois, on nous proposera d'éteindre la lumière.
- les détails : l'apparence de l'événement, les messages, le ton de l'écran...


- Qui a volé mon portefeuille ?

Un petit exemple pour que vos dialogues soient plus variés. Supposons par exemple un touriste qui se plaint qu'on lui a volé son portefeuille. Si on pouvait interagir avec lui pour qu'il ne répète pas inlassablement "Qui a volé mon portefeuille ?".

Faites votre événement, en première page, mettez ceci :



Sans les interrupteurs, ce serait vraiment monotone : vous auriez beau clamer votre innocence ou vous rendre coupable, cet imbécile continuera à vous demander si vous avez volé son portefeuille...
Mais avec les interrupteurs, vous pouvez mettre d'autres pages dans votre événement, qui auraient comme conditions "L'interrupteur ... est activé" et mettre une réplique adaptée à chaque fois. Et là, il arrêtera de vous enquiquiner avec son portefeuille. Sauf si vous avez un poids sur la conscience... Twisted Evil


- L'énigme du coffre

Un coffre n'est rien d'autre qu'un bête événement dont les commandes sont :
- Ajouter objet
- Message pour dire ce qu'il y a dans le coffre (c'est mieux d'être au courant de ça, quand même, non ?)

Sauf que ce n'est pas encore très réaliste, voyez plutôt :



Là, tout se passe bien, on se pointe devant le coffre, on nous dit qu'on a l'épée sacrée, unique en son genre, chouette.
Mais euh... essayez de rouvrir le coffre, pour voir...
Eh oui ! Il vous donne une deuxième épée sacrée ! Et ça pourrait continuer autant de fois que vous ne le voulez... et comme le joueur n'est pas toujours honnête, il en profitera sûrement.

Mais si vous activez un interrupteur "Objet pris" dans les commandes de votre événement, ça indiquera que l'objet est pris.

Mais on a encore un problème, car ce n'est pas encore ça qui va empêcher de piller le coffre une infinité de fois.
Alors il faudra faire une deuxième page et mettre en condition "L'interrupteur ... est activé", et ne rien mettre dans les commandes (à la rigueur, un message disant que le coffre a déjà été ouvert).
On peut aussi faire plus réaliste en changeant l'apparence du coffre déjà ouvert.


c) Les interrupteurs locaux

Ce paragraphe n'est pas valide sous RM 2003, car les interrupteurs locaux sont apparus sous RM XP.

Dans nos deux derniers exemples, il y avait tout de même un défaut : ça ne vous donne pas une impression de gaspillage que d'utiliser un ou deux interrupteurs juste pour varier la réplique d'un personnage insignifiant ?

Heureusement, il y a Findus les interrupteurs locaux !
Ils ont la particularité d'agir seulement sur l'événement dans lequel ils sont utilisés.
En fait, ils sont très pratiques pour des petits événements, comme les coffres ou les personnages, et ne donnent pas l'impression de gaspillage.
Vous pouvez alors les utiliser si l'interrupteur n'intervient dans aucun autre événement.

D'ailleurs, petit exemple : refaisons l'exemple du coffre avec un interrupteur local.
Reprenez l'événement "Coffre", enlevez les interrupteurs et conditions, et mettez à la place un interrupteur local :



Et en deuxième page :



Testez : le résultat est toujours le même. Mais c'est ce qu'on voulait, n'est-ce pas ?

Exercez-vous en reprenant l'exemple du touriste et son portefeuille. Il faudra juste utiliser deux interrupteurs locaux.

Mais si ça fait le même résultat, pourquoi avoir créé deux types d'interrupteurs ?

Reprenons notre exemple sur la lumière.
Normalement, vous avez l'événement "Interrupteur" qui permet d'allumer et d'éteindre la lumière. Ajoutez un événement "Gosse" à deux pages. La deuxième aura pour condition "L'interrupteur ... est activé".
Donnez-lui des répliques différents selon l'état de la lumière.
Testez. Normalement, il ne devrait pas dire la même chose si la lumière est allumée ou éteinte :



Et maintenant, remplaçons l'interrupteur "Lumière éteinte" par l'interrupteur local A. Pour ça, remplacez les "Activer/Désactiver l'interrupteur"... et la condition en deuxième page (procédez comme pour le coffre si vous avez du mal).

Testez. La lumière s'allume et s'éteint, certes, mais le gosse dit toujours la même chose.
Forcément, on n'a pas mis la bonne condition en deuxième page de cet événement ! Comme on a changé d'interrupteur, il faut mettre le bon interrupteur !
Alors mettez en condition "L'interrupteur local A est activé".

Testez de nouveau. Le résultat est toujours navrant, car le gosse ne dit pas qu'il a peur du noir.
Et pourtant, on a bien activé un interrupteur local A... mais dans un autre événement ! Donc l'événement "Interrupteur" a bien pris en compte cela, mais l'événement "Gosse" ne l'a pas senti !

Conclusion : les interrupteurs locaux ne peuvent pas toujours remplacer des interrupteurs normaux.
Car les interrupteurs normaux se ressentent n'importe où : quelle que soit la map, quel que soit l'événement, si à un moment vous avez activé un interrupteur normal, il sera activé où que vous soyez. Ce qui n'est pas le cas des interrupteurs locaux. Convaincus ?

S'il n'est pas possible de modifier "à distance" un interrupteur local via les events, en revanche, il est possible de le faire avec les scripts. Mais ça, c'est une autre histoire...



Voilà.
Comme quoi les interrupteurs ne sont pas si méchants.
Par ailleurs, si les interrupteurs permettent de rendre un jeu déjà meilleur, les variables sont quasiment indispensables pour faire des systèmes plus sophistiqués.
Et d'ailleurs... vous n'avez fait que manipuler des variables, ici, puisque je vous ai dit que les interrupteurs étaient justement des variables de type booléennes... Smile


Dernière édition par garsim le Ven 3 Fév - 21:42, édité 2 fois

garsim
Régent Lv.Zero
Régent Lv.Zero

Messages : 893
Age : 25

Fiche
Palmarès: 3
Spécialité: Rédaction, programmation (un peu)
Avertissements: Aucun

Voir le profil de l'utilisateur http://landigo.over-blog.com

Revenir en haut Aller en bas

Re: [Event] Les interrupteurs : de la théorie à la pratique

Message par elm6 le Sam 27 Mar - 9:22

Un bon gros tuto très complet. Smile
Tu l'avais posté sur YO non? Il me dit quelques chose. ^^

Bah rien à dire c'est nikel.
Dans les officiels.

+5 points instructeur. Wink

_________________

« Parce que certains mystères ne demandent pas à être compris, ils ont pour seul désir d’être vécus. » - Oskar Fleisjr, Chroniques de Liève.

elm6
Justicier Lv.Zero
Justicier Lv.Zero

Messages : 2547
Age : 26

Fiche
Palmarès: 2
Spécialité: Ecriture, making
Avertissements: Aucun

Voir le profil de l'utilisateur http://imagin.jeunforum.com/portal.htm

Revenir en haut Aller en bas

Re: [Event] Les interrupteurs : de la théorie à la pratique

Message par Myreus le Sam 27 Mar - 11:11

J'ai lu que le début mais il est très réussi ce tuto.

Myreus
Revenant sanguinaire Lv.24
Revenant sanguinaire Lv.24

Messages : 582
Age : 21

Fiche
Palmarès:
Spécialité: Scénario et Mapping
Avertissements: Aucun

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: [Event] Les interrupteurs : de la théorie à la pratique

Message par FoxFiesta le Sam 27 Mar - 17:58

J'ai pas lu parce que je fais pas partie du public visé, mais putain, il est long ton tuto, avec pleins de screens et tout, bravo !!

FoxFiesta
Mec-qui-se-bat Lv.28
Mec-qui-se-bat Lv.28

Messages : 888
Age : 20

Fiche
Palmarès:
Spécialité: Manger
Avertissements: Aucun

Voir le profil de l'utilisateur http://www.youtube.com/FoxFiesta40

Revenir en haut Aller en bas

Re: [Event] Les interrupteurs : de la théorie à la pratique

Message par Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum