| Gérer différents états | |
|
|
Auteur | Message |
---|
Pixel-boy Utilisateur confirmé: Rang *
Messages : 270
| Sujet: Gérer différents états Ven 6 Juil 2012 - 2:23 | |
| J'aimerais savoir quelle est la meilleur façon de gérer les différents états d'un objet. Par exemple imaginons un jeu de plateforme où le personnage peut se déplacer, nager, monter une échelle, chacune de ces actions modifie sa façon de se déplacer ainsi que ses sprites, en ajoutant à ça toutes les autres actions du jeu et les autres "etats" qui influence les actions du personnage, ça devient rapidement difficiles à gérer. Je cherche donc une méthode efficace pour contourner ce problème, en espérant que vous pourrez m'aider |
|
| |
Craki Utilisateur confirmé: Rang ****
Messages : 1496 Localisation : Dans l’univers de métamatière
| Sujet: Re: Gérer différents états Ven 6 Juil 2012 - 3:53 | |
| Je ne sais pas si les énumération (comme en C/C++) existent en GML, mais si c'est le cas, c'est certainement ça. |
|
| |
Adamo Utilisateur confirmé: Rang ***
Messages : 681 Localisation : Quebec
| Sujet: Re: Gérer différents états Ven 6 Juil 2012 - 4:14 | |
| les constants dans global game settings sinon au pire tu utilise une string |
|
| |
SPLN Utilisateur confirmé: Rang ***
Messages : 588 Localisation : Sur son ordinateur *vous vois* arrêtez de me regarder comme ça Projet Actuel : En quête de projet(s)!
Mes projets:
SP Lecteur Multimedia (Stand by)
S-Portable Graphics (demo1.8 is out! demo2.0 is planned)
SSB RPG (Stand by)
| Sujet: Re: Gérer différents états Ven 6 Juil 2012 - 10:19 | |
| Dans un de mes anciens projets j'utilisais une variable locale et des constantes. Puis je faisais un switch (var_statut) case "Nager" : blabla ;break; case "Marcher" : blabla ;break;. Le tout dans l'event step. |
|
| |
Pixel-boy Utilisateur confirmé: Rang *
Messages : 270
| Sujet: Re: Gérer différents états Ven 6 Juil 2012 - 12:13 | |
| Merci à vous, c'est déjà plus ou moins ce que je faisais mais au moins je suis fixé , par contre j'utilisais pas de constantes et ça m'as l'air pas mal. |
|
| |
onilink_ Modérateur
Messages : 9183 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: Gérer différents états Ven 6 Juil 2012 - 12:20 | |
| Perso j'initialise des constantes dans le create de mon objet genre :
MANGER = 1 NAGER = 2 SAUTER = 3 ...
Après si tu veut faire plusieurs actions a la fois, tu peut utiliser une seule variable d'état et des opérateurs binaires.
JUMP = 1 // 001 KICK = 2 // 010 SHOOT = 4 // 100 MOVE = 8 // 1000
state = MOVE&JUMP // 1001
Et pour faire les vérifications : if(state&MOVE) { blabla } if( state&(MOVE|JUMP) ) { blabla2 }
Pour ajouter une action : state |= KICK
Pour ajouter plusieurs actions : state |= KICK|JUMP
Pour changer l'état d'une action (passer de 1 a 0, et de 0 a 1) : state ^= MOVE |
|
| |
Pixel-boy Utilisateur confirmé: Rang *
Messages : 270
| Sujet: Re: Gérer différents états Ven 6 Juil 2012 - 12:29 | |
| Je crois que j'aurais du lire tout ton tuto sur les opérateurs binaires xD c'est dingue tout ce qu'on peux faire avec des 1 et des 0, en tout cas merci tu m'as encore mâcher le travail |
|
| |
onilink_ Modérateur
Messages : 9183 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: Gérer différents états Ven 6 Juil 2012 - 14:34 | |
| :p Bah c'est très simple, si tu veux un tuto express je te fait un résumé x) Tu connais déjà or hein ? (Qui se note aussi ||) Bah l'opérateur | fonctionne pareil, mais bit a bit. Donc on a false||false = false false||true = true true||true = true Bah en binaire : 0|0 = 0 0|1 = 1 1|1 = 1 Et pour le and : 0&0 = 0 0&1 = 0 1&1 = 1 Un nombre converti en binaire s'écrivant en une succession de bits, quand tu fait a|b, tu prend chaque bit de chaque nombre et tu lui fait subir la même opération : 15 & 3 -> 1111 & 0011 = 0011 -> 3 L'opérateur & est un opérateur servant a masquer. Il te permet d'obtenir la valeurs de certains bits a une certaine position. Pour ce qui est de la priorité des opérateurs, & est le * binaire, et | le + binaire. Donc & a la priorité sur |. Bref leur utilisation est surpuissante, et ce serais du gâchis de pas les connaitre |
|
| |
D-z Utilisateur confirmé: Rang *****
Messages : 1611 Localisation : Montpellier
| Sujet: Re: Gérer différents états Ven 6 Juil 2012 - 15:30 | |
| onilink_ et ses bricolages de C++ Mais j'aime bien le principe de gérer un tableau de booléens via un type plus étendu. Je n'avais pas réalisé que ça permettait de faire des switch sur tout un tableau d'un coup :o Après dans la plupart des moteurs, le plus simple est de faire quelques booléens : est-on sur le sol ? sur une échelle ? sous l'eau ? Car si tu utilises le système de constantes, l'ennui est que tu dois définir tous les états croisés (par exemple, sur une échelle ET sous l'eau en même temps) de manière indépendante. Et tu aboutis à des trucs étranges du genre : - Code:
-
// Donc, si on est sous l'eau... P'tain y'a plein de manières d'être sous l'eau. if( sousLeau || sousLeauEtEchelle || sousLeauEtAuSol ) { // Code } else { //euh, attends c'est quoi ce else, c'est si on n'est pas sous l'eau, ni sous l'eau et sur une échelle, ni... houlà. // ??? }
// **** it, je fais un second if à la place. if( auSol || auSolEtEchelle ... Tandis qu'avec des booléens : - Code:
-
if( surEchelle ) { // Code de déplacement sur une échelle : c'est un moteur à part, bien au chaud dans son bloc if. //Il n'utilise pas la gravité, et le perso réagit différemment aux touches que quand il est libre. // L'échelle est prioritaire sur les autres éléments de terrain. } else { if( sousLeau ) { // De nouveau, un moteur secondaire. Il est prioritaire sur le moteur normal // (dans le cas contraire on pourrait courir et sauter au fond de l'eau, // ce qui peut être voulu, il suffit de réarranger les conditions), mais n'est considéré // que si le perso n'est pas sur une échelle. } else { // Le moteur normal. Ici, on sait qu'on n'est ni sous l'eau, ni sur une échelle. // On utilisera là-dedans le booléen auSol afin de déterminer // l'accélération induite par les touches, la possibilité de sauter, etc. } } La méthode d'onilink_ est en fait la seconde, puisque tu utilises chaque bit de la variable état comme un booléen. Je préfère sa méthode (oui j'aime tripatouiller les opérateurs binaires :p), mais dans beaucoup de cas elle sera overkill. |
|
| |
Pixel-boy Utilisateur confirmé: Rang *
Messages : 270
| Sujet: Re: Gérer différents états Ven 6 Juil 2012 - 20:14 | |
| Merci pour votre aides je sais pas encore trop quoi choisir mais je vais faire des tests je verrai se qui me semble le plus adapté. |
|
| |
Contenu sponsorisé
| Sujet: Re: Gérer différents états | |
| |
|
| |
| Gérer différents états | |
|