Voir le sujet précédent :: Voir le sujet suivant |
Auteur |
Message |
Gevans Back
Inscrit le: 21 Aoû 2007 Messages: 1930 Sujets: 85
Médailles: 2 (En savoir plus...)
|
Posté le: 14/08/08 21:26 Sujet du message: Mouvement par le clavier |
|
|
Beaucoup de worldediteur ont un jour eu l'idée de créer un RPG où un joueur contrôle un seul personnage. Le problème est que ce n'est pas toujours simple de se diriger avec la souris.
Je vais dans ce tuto montrer une méthode pour donner à un joueur la possibilité de déplacer une unité à l'aide des touches directionnelles.
I/ Préliminaires et initialisation
a) La méthode
Le principe est simple, il suffit de détecter que le joueur presse une des touches directionnelles, ensuite on ordonne à l'unité de se déplacer d'une petite distance et dans une direction selon le bouton pressé.
Pour la détection les évènements sont déjà tous prêt et pour ce qui est de trouver la bonne direction ce n'est pas non plus très compliqué, en revanche un problème important se pose.
En effet, lorsque vous voulez aller loin devant, il est préférable de pouvoir maintenir le bouton avancer plutôt que d'appuyer dessus comme un dingue 200 fois de suite. Or le jeu ne détecte les appuies sur le bouton que lorsque vous appuyez effectivement dessus (et non pas lorsque vous avez déjà votre doigt dessus depuis 20 minutes...) donc il faut ruser en utilisant des variables booléennes.
Avec ces variables on va pouvoir savoir si le joueur est en train d'appuyer sur une touche, il suffira de mettre true lorsque la touche est pressé et false lorsqu'elle est lâchée.
b) Initialisation
On a besoin de pas mal de variables pour commencer.
u est une variable unité, elle stocke le fantassin qu'on va faire avancer.
haut, bas, gauche et droite sont des constantes entières, je vais expliquer leur intérêt dans 30 secondes.
pas est un réel qui donne la distance parcouru par le fantassin à chaque pression de la touche haut.
alpha est un réel aussi, il donne la valeur de l'angle dont va tourner le fantassin à chaque pression des touches gauche ou droite.
Il existe enfin la variable booléenne à déploiement mouv qui fonctionne avec les constantes dont j'ai parlé plus haut.
mouv[haut] = true signifie que le bouton flèche haut est pressé.
mouv[bas] = true signifie que le bouton flèche bas est pressé et ainsi de suite.
c) Détection
On va passer au concret, une première série de déclencheur va permettre de savoir quelle touche est pressée.
Avancer est pressé
Il faut également mettre mouv[bas] à false pour éviter les confusions.
Bas est pressé
Gauche est pressé
Droite est pressé
Pour ce qui est des touches lâchées, il faut mettre les variables à false et ordonner à l'unité de s'arrêter tout simplement.
Haut est lâché
Bas est lâché
Gauche est lâché
Droite est lâché
Maintenant que tout est en place il suffit de passer au déclo principal qui va gérer le mouvement.
II/ Mouvement
Dans ce déclo il va falloir séparer les cas avec des if, pour que le tout soit fluide, on utilise un évènement périodique rapide.
Gui: | Trigger: Evénements Temps - Every 0.10 seconds of game time |
a) Un pas en avant
Pour le pas en avant simple, il suffit de déplacer l'unité vers sa position plus une petite distance (pas) vers l'avant.
Gui: | Trigger: If (All Conditions are True) then do (Then Actions) else do (Else Actions) |
On vérifie bien que mouv[gauche] et mouv[droite] sont à false car on verra plus tard le pas en avant de côté (diagonale).
b) Un coup à droite et à gauche
Pas très différent, il suffit simplement de changer l'angle de l'unité donc de l'orienté vers un point.
Pour la droite
Gui: | Trigger: If (All Conditions are True) then do (Then Actions) else do (Else Actions) |
Pour la gauche
Gui: | Trigger: If (All Conditions are True) then do (Then Actions) else do (Else Actions) |
Si jamais on presse les 2 il faut gérer ça.
Gui: | Trigger: If (All Conditions are True) then do (Then Actions) else do (Else Actions) |
c) Le combo haut droite et haut gauche
Bah là c'est simplement les deux mélangés, c'est dans le cas où on appuie sur haut et droite/gauche.
Gui: | Trigger: If (All Conditions are True) then do (Then Actions) else do (Else Actions) |
Gui: | Trigger: If (All Conditions are True) then do (Then Actions) else do (Else Actions) |
d) Et l'arrière
Pour la marche arrière ce n'est pas possible de faire marcher l'unité tout en l'orientant à l'opposé (une marche arrière quoi...) donc j'ai fait simplement un angle de 180° ce qui correspond à un demi tour.
Ce n'est pas super utile car on peut le faire en maintenant appuyé les touches droite ou gauche mais peu importe.
Gui: | Trigger: If (All Conditions are True) then do (Then Actions) else do (Else Actions) |
Voilà pour ce déclo.
III/ Remarque sur le leak
Dans ces déclos je n'ai absolument pas géré les fuites de mémoires alors que j'utilise beaucoup de points.
Pour cela il faudrait utiliser 2 variables pos_from et pos_to.
pos_from est la position de l'unité avant le mouvement, on s'en sert pour calculer pos_to et on fait bouger l'unité vers pos_to puis on libère les 2 variables.
Mais j'ai quelques hésitations quand au fonctionnement du déclo avec cette méthode donc je ne préfère rien mettre pour l'instant en attendant que quelqu'un donne son avis
Télécharger la map démo : ici
Une fonction JASS résumant le tout ici _________________
Si vous recherchez quelque chose, il y a de très grandes chances que vous trouviez la réponse ici alors jetez y un oeil.
Topic indispensable
Dernière édition par Gevans le 07/09/08 21:29; édité 3 fois |
|
Revenir en haut |
|
|
Rommstein60 MODÉRATEUR À LA RETRAITE
Inscrit le: 23 Aoû 2007 Messages: 4766 Sujets: 136 Spécialité en worldedit: Keskesapeutfout' Médailles: 1 (En savoir plus...)
|
|
Revenir en haut |
|
|
super_mouton Floodozaurus
Inscrit le: 21 Aoû 2007 Messages: 2072 Sujets: 51 Spécialité en worldedit: Harceller vos maps de critiques !! ';..;' Médailles: 1 (En savoir plus...)
|
|
Revenir en haut |
|
|
Gevans Back
Inscrit le: 21 Aoû 2007 Messages: 1930 Sujets: 85
Médailles: 2 (En savoir plus...)
|
|
Revenir en haut |
|
|
Troll-Brain Ri1kamoua
Inscrit le: 23 Aoû 2007 Messages: 7143 Sujets: 147 Spécialité en worldedit: le troll, le flood, la vulgarité, mon coeur balance Médailles: 2 (En savoir plus...)
|
Posté le: 14/08/08 21:39 Sujet du message: |
|
|
Corrige moi si je me trompe mais tu ne gères pas l'appui simultané sur les flèches nan ? _________________
|
|
Revenir en haut |
|
|
Gevans Back
Inscrit le: 21 Aoû 2007 Messages: 1930 Sujets: 85
Médailles: 2 (En savoir plus...)
|
Posté le: 14/08/08 21:41 Sujet du message: |
|
|
si pour haut+droite et haut+gauche
Pour droite + gauche ça ne fait rien puisque ça tourne à false les 2 variables.
Pour haut + bas idem _________________
Si vous recherchez quelque chose, il y a de très grandes chances que vous trouviez la réponse ici alors jetez y un oeil.
Topic indispensable |
|
Revenir en haut |
|
|
Troll-Brain Ri1kamoua
Inscrit le: 23 Aoû 2007 Messages: 7143 Sujets: 147 Spécialité en worldedit: le troll, le flood, la vulgarité, mon coeur balance Médailles: 2 (En savoir plus...)
|
Posté le: 14/08/08 21:43 Sujet du message: |
|
|
General Vans a écrit: | si pour haut+droite et haut+gauche
Pour droite + gauche ça ne fait rien puisque ça tourne à false les 2 variables.
Pour haut + bas idem |
Non c'est faux t'auras une variable a true, la dernière flèche appuyée, faut que tu rajoutes des conditions en action probablement j'y ai pas réfléchi plus que cela ^^ _________________
|
|
Revenir en haut |
|
|
Gevans Back
Inscrit le: 21 Aoû 2007 Messages: 1930 Sujets: 85
Médailles: 2 (En savoir plus...)
|
Posté le: 14/08/08 21:46 Sujet du message: |
|
|
Ah ok je pensais que tu parlais de simultané dans le sens idéal du terme.
Bah si un gars est assez timoré pour appuyer sur gauche et droite en même temps c'est son problème, il ira soit à droite soit à gauche ^^ _________________
Si vous recherchez quelque chose, il y a de très grandes chances que vous trouviez la réponse ici alors jetez y un oeil.
Topic indispensable |
|
Revenir en haut |
|
|
Troll-Brain Ri1kamoua
Inscrit le: 23 Aoû 2007 Messages: 7143 Sujets: 147 Spécialité en worldedit: le troll, le flood, la vulgarité, mon coeur balance Médailles: 2 (En savoir plus...)
|
Posté le: 14/08/08 21:50 Sujet du message: |
|
|
Je dis parce que si tu fais ca avec les flèches en mode "normal" ca annule le mouvement de la cam, après stoi qui voit.
Et ce sera pas aléatoire simplement le dernier appui pris en compte.
PS : Ca veut dire quoi déjà timoré, c'est pas timide ?! _________________
|
|
Revenir en haut |
|
|
Gevans Back
Inscrit le: 21 Aoû 2007 Messages: 1930 Sujets: 85
Médailles: 2 (En savoir plus...)
|
Posté le: 14/08/08 21:52 Sujet du message: |
|
|
Ah ouai m** je pensais que ça voulait dire borné...
le dernier appuie quand tu lances les 2 doignts en même temps c'est quand même aléatoire.
Mais c'est vrai que le coup de la caméra c'est différent, sauf que là en appuyant à gauche on ne fait que changer la rotation alors qu'avec la caméra on se déplace.
En plus si tu tournes à gauche et que tu lances droite ça va arrêter le mouvement vers la gauche c'est pas plus mal je trouve. _________________
Si vous recherchez quelque chose, il y a de très grandes chances que vous trouviez la réponse ici alors jetez y un oeil.
Topic indispensable |
|
Revenir en haut |
|
|
Anthelme Anomalie floodiforme
Inscrit le: 28 Aoû 2007 Messages: 1857 Sujets: 93
|
Posté le: 14/08/08 22:30 Sujet du message: |
|
|
Tu aurai pu host une map d'exemple ( c'est mieux pour le copier coller )
Les "Do nothing" servent a rien nan ? _________________
Ancien The.gosu |
|
Revenir en haut |
|
|
Askary Membre a fort taux de post
Inscrit le: 22 Jan 2008 Messages: 970 Sujets: 24 Spécialité en worldedit: Gui
|
Posté le: 15/08/08 08:57 Sujet du message: |
|
|
The.gosu a écrit: | Les "Do nothing" servent a rien nan ? |
C'est justement ce que ça veut dire xD " faire rien".
T'es pas obligé de mettre mais ça fait plus propre ^^ _________________
Pirates & Corsaires en cours de mapping.
Grand maître de la secte Bouh communément appelé Maître Bouh |
|
Revenir en haut |
|
|
Rhadamante Petit flooder
Inscrit le: 28 Aoû 2007 Messages: 1457 Sujets: 24 Spécialité en worldedit: Bêêh hé hé hé ! Médailles: 3 (En savoir plus...)
|
Posté le: 15/08/08 10:21 Sujet du message: |
|
|
The.gosu a écrit: | Les "Do nothing" servent a rien nan ? |
Convertit une déclencheur GUI en JASS et tu verras à quoi ils servent... _________________
|
|
Revenir en haut |
|
|
Askary Membre a fort taux de post
Inscrit le: 22 Jan 2008 Messages: 970 Sujets: 24 Spécialité en worldedit: Gui
|
|
Revenir en haut |
|
|
Keitaro_Ura Floodozaurus
Inscrit le: 21 Aoû 2007 Messages: 2073 Sujets: 38 Spécialité en worldedit: Oui Médailles: 1 (En savoir plus...)
|
Posté le: 15/08/08 10:57 Sujet du message: |
|
|
ça prend de la place dans le code. _________________
|
|
Revenir en haut |
|
|
|