Yasei Ookami
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.


« Forum de discussion basé sur les créations de tous types. »
 
AccueilAccueil  PortailPortail  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  ConnexionConnexion  
-20%
Le deal à ne pas rater :
-20% Récupérateur à eau mural 300 litres (Anthracite)
79 € 99 €
Voir le deal

 

 Les interrupteurs : de la théorie à la pratique

Aller en bas 
3 participants
AuteurMessage
garsim
Admin
Admin
garsim


Messages : 1631
Date d'inscription : 03/09/2008
Age : 32
Localisation : Regardez sur Villorama !

Les interrupteurs : de la théorie à la pratique Empty
MessageSujet: Les interrupteurs : de la théorie à la pratique   Les interrupteurs : de la théorie à la pratique EmptyVen 26 Déc - 15:25

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 du tutoriel, que j'ai découpé en trois parties :
- notions théoriques : un peu rébarbatives, certes, mais elles permettent quand même de découvrir le sujet.
- utilisation des interrupteurs en programmation événementielle : la partie incontournable qui permet d'apprendre à utiliser en pratique les interrupteurs avec RM.
- utilisation des interrupteurs avec RGSS : pour aller plus loin et manipuler les interrupteurs avec des scripts. Nécessite cependant une connaissance basique du ruby et du RGSS.

A noter : vous n'êtes pas obligés de tout lire. Selon votre intérêt sur la question et la version de RM que vous utilisez, certaines parties sont inutiles :
- si vous êtes intéressés seulement par la pratique et l'utilisation des interrupteurs sous RM, la partie I n'est pas nécessaire.
- si vous utilisez rm2003, vous pouvez vous arrêter à la partie II - b (les parties II - c et III ne concernent que les versions XP et VX).
- si vous n'êtes pas intéressés par le RGSS, vous pouvez oublier la dernière partie.



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, le C++... et même le ruby (ce qui implique donc le RGSS, intéressant si vous utilisez les scripts) !
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 (activé et désactivé).



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 :
Code:
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 :
Code:
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 ? edente ).
Et "La condition est vraie" est vraie si... la condition est vraie (bon, vous m'aurez compris tirlalangue ).

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

Pour stocker ces informations sur les booléens, on peut utiliser des variables de type "booléen" qui ne pourront contenir que deux valeurs possibles : VRAI et FAUX. Et c'est justement ça, nos interrupteurs.
Par exemple, je définis une variable fille qui vaudra VRAI si je suis une fille, et FAUX sinon.
Je peux donc écrire quelque chose comme ça :
Code:
SI fille == VRAI
ALORS utiliser les toilettes pour filles
SINON utiliser les toilettes pour garçons
C'est ce genre de choses qu'on pourra faire avec les interrupteurs, que nous allons apprendre à utiliser... dès maintenant. grincant




II - Les interrupteurs en pratique

Pour illustrer la pratique, nous allons d'abord nous pencher sur l'utilisation des interrupteurs dans le cadre de la programmation événementielle, qui a l'avantage d'être plus intuitive. Puis nous passerons ensuite au RGSS.

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 sourire1 .
Accédez d'abord à la couche événementielle (le bouton approprié sur RM, et en raccourcis clavier, F7 sous 2003, F8 sous XP).
Ensuite, faites un événement.

Les interrupteurs : de la théorie à la pratique Eventxp-963926

Jusque-là, rien de bien compliqué.
Ajoutez une nouvelle instruction, et accédez à la gestion des interrupteurs. Vous devriez avoir cette fenêtre sous vos yeux :

Les interrupteurs : de la théorie à la pratique Interrxp-963936

- 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 :

Les interrupteurs : de la théorie à la pratique Gestioniner-96394a

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.

- Inverser état : inverse l'état de l'interrupteur, autrement dit active un interrupteur désactivé et désactive un interrupteur activé.

Malheureusement, cette dernière fonctionnalité n'est pas disponible sur les versions rmXP et postérieures ! Il faudra donc recourir à une autre méthode pour y parvenir. C'est d'ailleurs un petit exercice intéressant : essayez de refaire cette fonctionnalité avec des commandes événementielles déjà existantes.
Pour faire ça avec des commandes événementielles, vous aurez besoin d'utiliser les conditions : pour en faire une, faites Entrée dans les commandes, choisissez "Conditions", cochez "Interrupteur", puis choisissez l'interrupteur et l'état.
Je donnerai la correction de cet exercice un peu plus tard, et indiquerai les limites de cette méthode.


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 :

Les interrupteurs : de la théorie à la pratique Lumiere1-963976

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 :

Les interrupteurs : de la théorie à la pratique Lumiere2-96398f

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 :

Les interrupteurs : de la théorie à la pratique Touriste-9639ac

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... demon


- 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 :

Les interrupteurs : de la théorie à la pratique Epeesacree-9639c4

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

Rappel : les utilisateurs de rm2003 ne sont pas concernés par cette partie, cette fonctionnalité ayant été ajoutée sous rmXP et étant disponible également avec rmVX.

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 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 :

Les interrupteurs : de la théorie à la pratique Local1-9639ec

Et en deuxième page :

Les interrupteurs : de la théorie à la pratique Local2-9639f2

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.


Si vous vous demandez quelle différence il peut vraiment y avoir, 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 :

Les interrupteurs : de la théorie à la pratique Mome-9639fb

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 (ou du moins, ils ne sont pas prévus pour... mais cependant, on verra comment il est possible de tricher avec demon ). Convaincus, maintenant ?



III - Et le RGSS dans tout ça ?

Rebelote pour les utilisateurs de rm2003 : ce paragraphe ne vous concerne pas ! Il explique comment utiliser les interrupteurs en RGSS.

Cette partie impose de connaître un minimum le RGSS (entre autres, savoir utiliser une variable de type "tableau"), mais sans plus. Le niveau de cette partie est peut-être plus élevé mais les perspectives sont plus larges...

a) Manipuler les interrupteurs avec RGSS

Comme un grand nombre de ressources de RM, les interrupteurs sont également modifiables via les scripts. La variable à manipuler ici est : $game_switches, où i est le numéro de l'interrupteur à utiliser.
Les commandes à utiliser sont assez intuitives :
Code:
$game_switches[1] = true
$game_switches[2] = false
L'interrupteur 1 sera alors activé et le 2 désactivé. Tout ce qu'il faut retenir, c'est que [i]true = activé
et false = désactivé.

Par ailleurs, vous vous souvenez du petit exercice que je vous avais donné, qui consistait à inverser l'état d'un interrupteur à l'aide de commandes événementielles ? Il est temps que je vous en donne la solution :

Les interrupteurs : de la théorie à la pratique Inversetat-963965

Mais au fait, vous devez certainement vous demander pourquoi j'écris ça dans une section dédiée au RGSS ? Eh bien parce que là encore, il y a un équivalent, qui va nous simplifier la vie.
Certes, la solution événementielle a le mérite d'être simple et intuitive, mais elle reste assez lourde car à chaque fois il faut mettre une condition et deux modifications d'état. Alors qu'en ruby/RGSS, une seule ligne de code suffit... voyez plutôt :

Code:
$game_switches[i] = !$game_switches[i]

(avec i le numéro de l'interrupteur à modifier)
L'opérateur ! permet d'inverser l'état de la variable booléenne. Ainsi, on est sûrs d'avoir l'état inverse à chaque fois.

Vous pouvez aussi tester une égalité :
Code:
if $game_switches[1] == true
    #ce code s'exécutera si l'interrupteur n°1 est activé
end
D'ailleurs, ça ne vous rappelle pas la partie I ça ? grincant
En fait, on se retrouve à programmer "en vrai" ce qui était resté de la théorie jusque-là. Et on n'a pas encore fini...


b) Et avec les interrupteurs locaux...

Vous devez aussi vous demander s'il est possible de manipuler les interrupteurs locaux avec les scripts ?
La bonne nouvelle : oui, c'est possible (mais vous n'en doutiez pas hein ? tirlalangue ).
La mauvaise nouvelle : c'est un peu plus compliqué pour y parvenir.

Pourquoi ? Eh bien parce que si les interrupteurs globaux (ceux qu'on a utilisés jusque-là) sont rangés dans un espace commun et disponibles partout, les locaux, eux, sont rattachés à un événement en particulier, qui, lui, est rattaché à une map... donc on aura besoin de plus de données pour les manipuler.

On peut cependant simplifier un peu les choses :
Code:
$game_self_switches[cle]
désigne l'interrupteur local correspondant à la clé cle. Mais cette clé, ce n'est pas un simple nombre... je vous rappelle que ça dépend de la map et de l'event en question.
Ainsi cle est elle-même une variable composée :
Code:
cle = [id_map, id_event, id_interrupteur]
Où, vous l'aurez deviné, id_map est l'identifiant de la map dans laquelle se trouve l'événement dont l'identifiant est id_event, dans lequel se trouve l'interrupteur local dont l'identifiant est id_interrupteur. Pour ce dernier, vous pouvez d'ailleurs indiquer la lettre correspondante (A, B, C ou D) à la place d'un numéro d'identifiant, mais entourez-la de guillemets.

Ainsi, si on écrit :
Code:
cle = [6, 9, "A"]
$game_self_switches[cle] = true
Cela activera l'interrupteur local A de l'event n°9 de la 6e map du projet.

Vous pouvez aussi vous servir de l'opérateur ! comme pour les interrupteurs globaux :
Code:
cle = [5, 2, "B"]
$game_self_switches[cle] = !$game_self_switches[cle]
Vous devriez comprendre ce que fait cette portion de code maintenant.

Comme quoi, on voit que les interrupteurs locaux ne sont qu'un beau subterfuge pour nous faire croire qu'ils ne sont modifiables que dans leur event, alors que ce n'est pas le cas en interne. grincant
Cependant, ils permettent quand même de mieux s'organiser, et de retrouver plus aisément les interrupteurs caractérisant des événements particuliers des autres.



Eh ben, ça en fait du texte pour un sujet qui, à la base, était surtout censé aiguiller les débutants sur leur apprentissage de l'utilisation des interrupteurs, qui peut paraître un peu rebutante au début, mais qui se montre finalement simple et indispensable.
Il n'était d'ailleurs pas nécessaire de lire le tutoriel en entier pour avoir une bonne pratique. Mais j'estimais que, quitte à faire une introduction sur les interrupteurs, il était possible d'aller un peu plus loin pour les curieux.

Sources

Merci (malgré eux) à Zangther et Drakhaine pour les petites explications sur le RGSS qui m'ont permis d'y voir plus clair sur cet aspect.


Dernière édition par garsim le Mer 23 Fév - 19:29, édité 2 fois
Revenir en haut Aller en bas
Ben Watts
Roi
Roi
Ben Watts


Messages : 2996
Date d'inscription : 17/08/2008
Age : 29
Localisation : Sud de la France.

Les interrupteurs : de la théorie à la pratique Empty
MessageSujet: Re: Les interrupteurs : de la théorie à la pratique   Les interrupteurs : de la théorie à la pratique EmptySam 27 Déc - 12:42

Merci pour ce tuto, maintenant on va forcer Ieven à le lire! xD
Revenir en haut Aller en bas
https://yasei-ookami.forumactif.org
Ieven
Graphiste
Graphiste
Ieven


Messages : 1490
Date d'inscription : 05/10/2008
Age : 30
Localisation : Aix en Provence

Les interrupteurs : de la théorie à la pratique Empty
MessageSujet: Re: Les interrupteurs : de la théorie à la pratique   Les interrupteurs : de la théorie à la pratique EmptyMer 14 Jan - 0:02

Benf a écrit:
Merci pour ce tuto, maintenant on va forcer Ieven à le lire! xD


Je connais les interrupteurs et les variables - soupir -.

Et c'est que maintenant que tu réagis?
Revenir en haut Aller en bas
Contenu sponsorisé





Les interrupteurs : de la théorie à la pratique Empty
MessageSujet: Re: Les interrupteurs : de la théorie à la pratique   Les interrupteurs : de la théorie à la pratique Empty

Revenir en haut Aller en bas
 
Les interrupteurs : de la théorie à la pratique
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Yasei Ookami :: Making :: Tutoriels making-
Sauter vers:  
Ne ratez plus aucun deal !
Abonnez-vous pour recevoir par notification une sélection des meilleurs deals chaque jour.
IgnorerAutoriser