Day.png);">
Apprendre


Vous êtes
nouveau sur
Oniromancie?

Visite guidée
du site


Découvrir
RPG Maker


Apprendre
RPG Maker

Tutoriels
Guides
Making-of

Dans le
Forum

Section Entraide

Jeux: puie z / Jeux: Citymaime - Chapitre 1 / Jeux: Mer, îles et fous / News: Du neuf dans le making / News: Muma|Rope est disponible en (...) / Chat

Bienvenue
visiteur !




publicité RPG Maker!

Statistiques

Liste des
membres


Contact

Mentions légales

395 connectés actuellement

30732443 visiteurs
depuis l'ouverture

2422 visiteurs
aujourd'hui



Barre de séparation

Partenaires

Indiexpo

Akademiya RPG Maker

Blog Alioune Fall

Fairy Tail Constellations

Level Up!

Tashiroworld

RPG Maker VX

Le Comptoir Du clickeur

Tous nos partenaires

Devenir
partenaire



EMG 04 : Exemple pratique avec un système de leviers

Où on met en pratique les concepts abordés plus tôt dans les tutos précédents.

Ecrit par François Berhn le 15/06/2016


❤ 0

EMG 4 : Un système de leviers








I Introduction

Ce système a été conçu pour 2003 et je n'ai pas regardé mais je doute qu'il puisse fonctionner de la même manière sur les RMs qui suivent. Ceci dit si vous voulez faire ce genre de système sur un RM postérieur à 2003, mieux vaut passer par les scripts.

Comme dit dans la description de l'article, il s'agit d'un tutoriel où on met en pratique les concepts abordée plus tôt dans les tutos précédents. De fait, il est recommandé avant de lire ce tutoriel de regarder ceci au préalable :

Tuto #1 sur les pseudos fonction -> Cliquer ici
Tuto #3 sur la simulation d'interrupteur local -> Cliquer ici


II Conceptt

Le système que nous allons voir est assez simple : Le héros se retrouve face à plusieurs leviers et doit trouver lesquels activer et lesquels laisser désactivés pur pouvoir ouvrir une porte ou activer un mécanisme quelconque.

Une solution possible serait de faire plusieurs events avec deux pages et qui pour s'activer ou se désactiver utilisent un interrupteur pour pouvoir modifier leur état. La vérification se ferait alors en s'assurant que tel levier est activé s'il le faut et que tel levier est désactivé s'il le faut.
Cette technique marche bien mais souffre de plusieurs soucis :
- Le systèmes consomme un interrupteur par levier qu'il faudra réassigner pour chaque copie (pour ne pas faire de collision)
- La vérification implique d'avoir une condition pour chaque interrupteur ce qui rend ce code assez long.

Heureusement une autre solution, basée sur les deux concepts vus précédemment, permet de réduire ces soucis à l'utilisation d 'une seule variable et donc d'une seule condition de vérification.


III Un peu de théorie

Une chose à laquelle on ne pense pas forcément tout le temps quand on examine un nombre, c'est qu'il peut aussi bien être analysé comme un seul nombre que comme une séquence de chiffres. Par exemple, 3435 peut être vu comme :
- 3435
- 3; 4; 3; 5
- 34; 35
- 343; 5
- ...

On peut alors considérer un nombre non plus comme une valeur mais comme un ensemble de valeurs. Ainsi, sin on le souhaite, on peut très bien identifier ce nombre comme représentant l'équipement d'un personnage et qu'ainsi le premier 3 désigne en fait le 3ième casque de la base de donnée.
Et comment récupérer une valeur ? C'est très simple, avec un modulo et une division.
Pour ce faire en fait on va donner à chaque chiffre un indexe qui le positionne dans la séquence, en commençant par la valeur 0 tout à droite et en ajoutant 1 à chaque déplacement vers la gauche. Ainsi :
- 5 est à l'index 0
- 3 est à l'index 1
- 4 est à l'index 2
- 3 est à l'index 3

Ce choix n'est évidement pas fait au hasard et on pourra d'ailleurs remarquer que le chiffre x en position y est égal à x * 10 ** y (x fois 10 à la puissance y). Par exemple 4 * 10 ** 2 = 400.
Et pour récupérer le 4 il suffira de faire (3435 / (10 ** 2)) % 10.

Et voilà, on peut stocker jusqu'à 7 interrupteurs dans une variable, en mettant les chiffres soit à 1 pour activé soit à 0 pour désactivé. Mais est-ce suffisant ?

En fait, une variable peut contenir des nombres de 0 à 9999999, soit 10000000 de valeurs positives. Mais nous n'en utilisons que 2**7, soit 128 (ce qui est peu). Il existe cependant une solution à ce problème -> le binaire.

En effet, une valeur binaire n'étant constituée que de 0 et de 1, cela correspond parfaitement aux valeurs qu'on voulait donner pour représenter un interrupteur. De plus, une valeur binaire ayant, à valeur égale, plus de chiffres qu'une valeur décimale, cela veut dire qu'on peut stocker bien plus d’interrupteurs sous cette forme, à savoir 22.
Ce qui est d'ailleurs cool avec ce changement de base, c'est qu'il n'y a pas besoin de convertir une valeur en binaire pour récupérer le bon bit. IL suffit seulement de remplacer cette formule :

(3435 / (10 ** 2)) % 10

Par celle-ci

(3435 / (2 ** 2)) % 2.


IV Code

Voici enfin pour vos petite mirettes le code en event :
Mais avant toute chose, pour que ce système fonctionne il faut que tous les event des leviens aient des id qui se suivent. Aussi il est recommandé de bien vérifier à la création de votre système qu'il n'y a pas de trous d'id entre vos events.

image

Je vais donc prendre le temps d'expliquer le fonctionnement du code :
image

Ici l'event met dans une variable son id. Si vous avez lu le tuto #3 ça ne devrais pas vous être étranger.

image
Ici on retire une valeur égale à l'id de l'event. Pourquoi ? Car on souhaite relier le premier event au chiffre en positon 0 dans la variable. Et c'est le moyen le plus simple de le faire.
Par exemple si nos event de leviers ont les id de 35 à 38, en retirant 35 à chacun on obtient les nombres de 0 à 4 et on pourra directement les utiliser comme indexe de variable.

image
Ici on réutilise le code de la puissance du tuto #1 pour calculer 2 à la puissance du contenu de la variable 23.

image
Enfin là rien de très surprenant, on a le même code que dans le tuto précédant. Sauf qu'ici, au lieu d'affecter directement la porte, on agit sur une variable en lui ajoutant la valeur correspondante au bit dont on avait calculé l'indexe en début de code.

Et pour finir voici un exemple d'utilisation :
image
Comme tous les interrupteurs sont sauvegardés dans une variable, il ne faut plus qu'une condition pour savir si c'est bon ou pas. Ce qui rend le code plus léger et facile à lire.
Il ne reste plus qu'à savoir comment calculer la bonne valeur selon la combinaison que vous voulez faire. Pour ce faire, lancez le jeu et rendez vous sur la map pour mettre en place la bonne combinaison. Il ne reste plus qu'à presser F9 et regarder le contenu de la variable qui stocke les interrupteurs et vous aurez la bonne valeur !


V Conclusion

Dans ce tuto, nous avons vu une application simple de ce que les concept qui nous avons abordée peuvent donner en se combinant. De plus, nous avons obtenu une preuve que cette façon de coder permet de faire du code bien plus souple et donc moins compliqué à fabriquer puisque dans ce cas, une fois le premier event terminé, il ne reste plus qu'à le copier-coller comme on le souhaite, tant qu'on ne dépasse pas les 22 leviers.



Verehn - posté le 15/06/2016 à 23:20:26 (9058 messages postés) - honor

❤ 0

Vhehrhehn

On ne l'arrête plus !

Eldrao ~ PakuPaku ~ Winged Light ~ Ruin ~ Ma galerie ~ LTDAD ~ Don de graphismes plateforme 2D


François Berhn - posté le 15/06/2016 à 23:37:16 (5402 messages postés)

❤ 0

Tonton Hellper

Et ça devrais tenir encore un petit moment car j'ai encore au moins 5 autres tutos en tête :D

La liste des raisons pour lesquelles le making se meurt, la cinquième va vous étoner | Des projets abandonnés, source d'inspiration :D | Mes jeux


Konnie - posté le 16/06/2016 à 11:24:05 (3982 messages postés)

❤ 0

Les tutos sont super cools et faudrait vraiment leur donner plus de visibilité :D


Verehn - posté le 16/06/2016 à 16:51:04 (9058 messages postés) - honor

❤ 0

Vhehrhehn

On pourrait en parler dans la prochaine news du site, ou bien leur dédier une news quand il y en aura 9 (puisque Hellper en a 5 autres en tête).

Eldrao ~ PakuPaku ~ Winged Light ~ Ruin ~ Ma galerie ~ LTDAD ~ Don de graphismes plateforme 2D


François Berhn - posté le 16/06/2016 à 20:16:56 (5402 messages postés)

❤ 0

Tonton Hellper

Voire quand il y en aura 10, même (comme ça ça fera un chiffre rond :p)

La liste des raisons pour lesquelles le making se meurt, la cinquième va vous étoner | Des projets abandonnés, source d'inspiration :D | Mes jeux

Suite à de nombreux abus, le post en invités a été désactivé. Veuillez vous inscrire si vous souhaitez participer à la conversation.

Haut de page

Merci de ne pas reproduire le contenu de ce site sans autorisation.
Contacter l'équipe - Mentions légales

Plan du site

Communauté: Accueil | Forum | Chat | Commentaires | News | Flash-news | Screen de la semaine | Sorties | Tests | Gaming-Live | Interviews | Galerie | OST | Blogs | Recherche
Apprendre: Visite guidée | RPG Maker 95 | RPG Maker 2003 | RPG Maker XP | RPG Maker VX | RPG Maker MV | Tutoriels | Guides | Making-of
Télécharger: Programmes | Scripts/Plugins | Ressources graphiques / sonores | Packs de ressources | Midis | Eléments séparés | Sprites
Jeux: Au hasard | Notre sélection | Sélection des membres | Tous les jeux | Jeux complets | Le cimetière | RPG Maker 95 | RPG Maker 2000 | RPG Maker 2003 | RPG Maker XP | RPG Maker VX | RPG Maker VX Ace | RPG Maker MV | Autres | Proposer
Ressources RPG Maker 2000/2003: Chipsets | Charsets | Panoramas | Backdrops | Facesets | Battle anims | Battle charsets | Monstres | Systems | Templates
Ressources RPG Maker XP: Tilesets | Autotiles | Characters | Battlers | Window skins | Icônes | Transitions | Fogs | Templates
Ressources RPG Maker VX: Tilesets | Charsets | Facesets | Systèmes
Ressources RPG Maker MV: Tilesets | Characters | Faces | Systèmes | Title | Battlebacks | Animations | SV/Ennemis
Archives: Palmarès | L'Annuaire | Livre d'or | Le Wiki | Divers