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

News: Les actualités de fin d'année / Jeux: Glixel en version complète / Jeux: Izac 1 / News: Des jeux d'hiver sous la couette / Scripts: Système de vol pour RPG Maker (...) / Chat

Bienvenue
visiteur !





Désactiver
la neige


publicité RPG Maker!

Statistiques

Liste des
membres


Contact

Mentions légales

202 connectés actuellement

30834812 visiteurs
depuis l'ouverture

2079 visiteurs
aujourd'hui



Barre de séparation

Partenaires

Indiexpo

Akademiya RPG Maker

Blog Alioune Fall

Fairy Tail Constellations

Leo-Games

Le Comptoir Du clickeur

Alex d'Or

Tous nos partenaires

Devenir
partenaire



Vérifier des variables avec un interrupteur

Simplification d'un système de vérification de variable avec un interrupteur.

Ecrit par Hellper (François Berhn) le 08/01/2011


❤ 0

Note : Ce tutoriel fonctionne à la fois avec 2k, 2K3, XP et VX. Mais il vous sera surement plus utile avec 2K et 2k3 qui utilisent plus de programmation évènementielle.
Notebis : Ce tutoriel nécessite un minimum de connaissance en programmation évènementielle ou vous risquez de ne pas le comprendre.

Imaginons que vous fassiez un rpg pouvant accepter jusqu'à six héros dans l'équipe. Pour cela, vous êtes obligé de passer outre le système d'équipe de base puisque limité à 4 héros. Vous décidez alors d'utiliser un système de variable utilisant l'identifiant du héros de cette manière :

Portion de code : Tout sélectionner

1
2
3
4
5
6
Vhéros1 = Idhéros
Vhéros2 = Idhéros
Vhéros3 = Idhéros
Vhéros4 = Idhéros
Vhéros5 = Idhéros
Vhéros6 = Idhéros


Note : Idhéros correspond à chaque fois à l'identifiant d'un héros différent.Maintenant, si vous voulez vérifier la présence d'un héros, vous devrez faire un code ressemblant à peu près à ceci :

Portion de code : Tout sélectionner

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Si Vhéros1 = IdX (pour un Id donné)
  Faire action1 (ce que vous faîtes s'il est là)
Sinon
  Si Vhéros2 = IdX
    Faire action1
  Sinon
    Si Vhéros3 = IdX
      Faire action1
    Sinon
      Si Vhéros4 = IdX
        Faire action1
      Sinon
          Si Vhéros5 = IdX
        Faire action1
        Sinon
            Si Vhéros6 = IdX
          Faire action1
          Sinon
            Faire action2 (ce que vous faîtes s'il n'est pas là)



Vous avez là un code de 19 lignes. Si vous le faîtes pour 3 héros et en admettant que le code Faire action1 et faire action2 prenne 5 ligne, ce qui est peu, ce la vous fait donc un total de 153 lignes. Et si dans Faire action1, vous vérifiez la présence d'un autre héros, c'est de l'ordre de900 à 1000 lignes, voire plus.

Le problème de ce code de vérification est qu'il n'est pas universel et doit être géré au cas par cas. Maintenant, je vais vous montrer comment simplifier efficacement ce code en utilisant le vérification par interrupteur. Je m'explique. Dans ce cas là, nous devons vérifier si un héros est dans une situation parmi les deux possible, c'est-à-dire :
- Soit il est présent.
- Soit il est absent.
Il est donc intéressant d'utiliser un interrupteur en faisant l'association désactivé/absent et activé/présent.

Maintenant, passons au code :
Tout d'abord, "créez" une variable, un interrupteur et un event commun activé par appel que vous nommez comme vous voulez. Ici, je les nommerai Vid, Intverif et Eventcom. L'event commun contiendra la partie principale du code. Mais avant, voici le code à placer pour vérifier :

Portion de code : Tout sélectionner

1
2
3
4
5
6
Vid =IdX (toujours pour un Id donné.)
Appeller un event commun : Eventcom
Si Intverif est activé
  Faire action1
Sinon
  Faire action2


Vous noterez que l'utilisation de la variable pour l'Id sert à la fois à garder la donnée pour Eventcom mais aussi à le rendre plus souple.

Voici ensuite le code à mettre dans Eventcom :

Portion de code : Tout sélectionner

1
2
3
4
5
6
7
8
9
10
11
12
13
Désactiver Intverif 
Si Vhéros1 = Vid
Activer Intverif
Si Vhéros2 = Vid
Activer Intverif
Si Vhéros3 = Vid
Activer Intverif
Si Vhéros4 = Vid
Activer Intverif
Si Vhéros5 = Vid
Activer Intverif
Si Vhéros6 = Vid
Activer Intverif


Vous noterez que l'interrupteur doit être désactivé pour mettre le cas absent par défaut, c'est-à-dire qu'il est absent si aucune des condition qui suit ne marche c'est-à-dire s'il n'est pas présent.
Ce qui nous fait donc un total de 6 lignes de base, soit en reprenant les 3 vérifications et les 5 lignes pour Faire action1 et Faire action2 un total de 42 lignes, soit un 111 lignes économisées.

Et vous pouvez enregistrer le position du héros dans un variable Vplace en rajoutant 6 lignes de code pour obtenir :

Portion de code : Tout sélectionner

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Désactiver Intverif 
Si Vhéros1 = Vid
Activer Intverif
Vplace=1
Si Vhéros2 = Vid
Activer Intverif
Vplace=2
Si Vhéros3 = Vid
Activer Intverif
Vplace=3
Si Vhéros4 = Vid
Activer Intverif
Vplace=4
Si Vhéros5 = Vid
Activer Intverif
Vplace=5
Si Vhéros6 = Vid
Activer Intverif
Vplace=6



Et voilà, c'est fini. N'hésitez pas à poser des question.



mtarzaim - posté le 08/01/2011 à 12:18:28 (2926 messages postés)

❤ 0

Anaxagoras -500 BC

C'est quoi la valeur de IdX exactement ?

Parce que, si c'est un nombre de 1 à 6, il suffit de faire dans EventCom

Desactiver intverif
Si Vid != 0
Activer intverif
Vplace = Vid
fin si

Il me semble aussi que ce serait plus simple de gérer tout ça à travers un tableau.
Ca permettrait de faire des traitements incrémentifs de quelques lignes.

ex :
Pour i de 0 à 5
faire TableauHeros(i).action1
Fin pour

Projets terminés : DIX Life Precious - TheFrogStudio.Net


hellper - posté le 08/01/2011 à 17:43:16 (5402 messages postés)

❤ 0

Tonton Hellper

mtarzaim a dit:


C'est quoi la valeur de IdX exactement ?


C'est l'ID du héros concerné par la vérification. Ça peut être n'importe quelle valeur.

Parce que, si c'est un nombre de 1 à 6, il suffit de faire dans EventCom

mtarzaim a dit:


Desactiver intverif
Si Vid != 0
Activer intverif
Vplace = Vid
fin si


Ce code ne signifie rien, puisque Vid ne sert qu'a enregistrer l'id du héros. Donc dès que tu chage sa valeur, puisqu'elle n'est pas remise a 0, la condition n'a plus d'intérêt.

mtarzaim a dit:


Il me semble aussi que ce serait plus simple de gérer tout ça à travers un tableau.
Ca permettrait de faire des traitements incrémentifs de quelques lignes.


Sauf qu'on ne peux pas faire de tableau en programmation évènementielle. Mais en désignant les variables Vhéros, on devrait pouvoir raccourcir encore un peu l'évènement commun.

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


AristA - posté le 11/01/2011 à 17:07:27 (4363 messages postés)

❤ 0

Pour ce genre d'opération, il est encore plus recommandé d'utiliser des pointeurs, débutant. Tu ne fais ici que découvrir les fonctions.

image


10 lignes qu'importe le nombre de variable à traiter, échec et mat et as de pique.

On peut encore plus simplifier ça en mettant ça dans un commom event, et rendre ça encore plus flexible pour vérifier d'après une variable quelle variable on vérifiera. Ensuite modification en plus d'une variable qui pointe une autre variable qui est celle qu'on cherche.
C'est très peu concret, n'est ce pas ?


hellper - posté le 16/01/2011 à 18:07:01 (5402 messages postés)

❤ 0

Tonton Hellper

Et si la valeur de la variable n'est nulle part, on se retrouve dans une boucle infinie.
Bel echec et mat...

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


AristA - posté le 24/01/2011 à 19:08:54 (4363 messages postés)

❤ 0

hellper a dit:


Et si la valeur de la variable n'est nulle part, on se retrouve dans une boucle infinie.
Bel echec et mat...


Et alors ?

Les boucles sont infinies.

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