Worldedit
  Worldedit
Le site sur l'éditeur de warcraft 3 !
 
  FAQFAQ   RechercherRechercher   Liste des MembresListe des Membres    Groupes d'utilisateursGroupes d'utilisateurs   medals.php?sid=69e11a365e337cfed1f2005eebd830c3Médailles   S'enregistrerS'enregistrer 
 ProfilProfil   Se connecter pour vérifier ses messages privésSe connecter pour vérifier ses messages privés   ConnexionConnexion 
  FAQFAQ World Editor   UploadUploader une map ou une image    UploadAjouter sa map à l'annuaire   UploadConsulter l'annuaire

Mouvement par le clavier
Aller à la page 1, 2, 3, 4, 5  Suivante
 
Poster un nouveau sujet   Répondre au sujet    Worldedit Index du Forum -> Tutoriels
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...)
Rédacteur de tuto #1 (Quantité : 1) Gevans (Quantité : 1)

MessagePosté le: 14/08/08 21:26    Sujet du message: Mouvement par le clavier Citer

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.

Gui:
Trigger:
Collapse Evénements
Map initialization
Conditions
Collapse Actions
Set u = Fantassin 0000 <gen>
Set haut = 1
Set bas = 2
Set gauche = 3
Set droite = 4
Set pas = 100.00
Set alpha = 25.00


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é

Gui:
Trigger:
avancer p
Collapse Evénements
Joueur - Joueur 1 (Rouge) Pressées the Flèche haut key
Conditions
Collapse Actions
Set mouv[bas] = FALSE
Set mouv[haut] = TRUE


Il faut également mettre mouv[bas] à false pour éviter les confusions.

Bas est pressé

Gui:
Trigger:
reculer p
Collapse Evénements
Joueur - Joueur 1 (Rouge) Pressées the Flèche basse key
Conditions
Collapse Actions
Set mouv[haut] = FALSE
Set mouv[bas] = TRUE


Gauche est pressé

Gui:
Trigger:
gauche p
Collapse Evénements
Joueur - Joueur 1 (Rouge) Pressées the Flèche gauche key
Conditions
Collapse Actions
Set mouv[gauche] = TRUE


Droite est pressé

Gui:
Trigger:
droite p
Collapse Evénements
Joueur - Joueur 1 (Rouge) Pressées the Flèche droite key
Conditions
Collapse Actions
Set mouv[droite] = TRUE



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é

Gui:
Trigger:
avancer l
Collapse Evénements
Joueur - Joueur 1 (Rouge) Libérées the Flèche haut key
Conditions
Collapse Actions
Set mouv[haut] = FALSE
Unité - Order u to Arrêter


Bas est lâché

Gui:
Trigger:
reculer l
Collapse Evénements
Joueur - Joueur 1 (Rouge) Libérées the Flèche basse key
Conditions
Collapse Actions
Set mouv[bas] = FALSE
Unité - Order u to Arrêter


Gauche est lâché

Gui:
Trigger:
gauche l
Collapse Evénements
Joueur - Joueur 1 (Rouge) Libérées the Flèche gauche key
Conditions
Collapse Actions
Set mouv[gauche] = FALSE
Unité - Order u to Arrêter


Droite est lâché

Gui:
Trigger:
droite l
Collapse Evénements
Joueur - Joueur 1 (Rouge) Libérées the Flèche droite key
Conditions
Collapse Actions
Set mouv[droite] = FALSE
Unité - Order u to Arrêter


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)
Collapse Si - Conditions
mouv[haut] Egal à  TRUE
mouv[droite] Egal à  FALSE
mouv[gauche] Egal à  FALSE
Collapse Alors - Actions
Unité - Order u to Avancer vers ((Position of u) offset by pas towards (Facing of u) degrees)
Collapse Sinon - Actions
Do nothing


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)
Collapse Si - Conditions
mouv[droite] Egal à  TRUE
mouv[gauche] Egal à  FALSE
Collapse Alors - Actions
Unité - Make u face ((Position of u) offset by 250.00 towards ((Facing of u) - alpha) degrees) over 0.00 seconds
Collapse Sinon - Actions
Do nothing


Pour la gauche

Gui:
Trigger:
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
Collapse Si - Conditions
mouv[gauche] Egal à  TRUE
mouv[droite] Egal à  FALSE
Collapse Alors - Actions
Unité - Make u face ((Position of u) offset by 250.00 towards ((Facing of u) + alpha) degrees) over 0.00 seconds
Collapse Sinon - Actions
Do nothing


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)
Collapse Si - Conditions
mouv[droite] Egal à  TRUE
mouv[gauche] Egal à  TRUE
Collapse Alors - Actions
Unité - Order u to Arrêter
Collapse Sinon - Actions
Do nothing


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)
Collapse Si - Conditions
mouv[haut] Egal à  TRUE
mouv[gauche] Egal à  TRUE
Collapse Alors - Actions
Unité - Order u to Avancer vers ((Position of u) offset by pas towards ((Facing of u) + alpha) degrees)
Collapse Sinon - Actions
Do nothing


Gui:
Trigger:
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
Collapse Si - Conditions
mouv[haut] Egal à  TRUE
mouv[droite] Egal à  TRUE
Collapse Alors - Actions
Unité - Order u to Avancer vers ((Position of u) offset by pas towards ((Facing of u) - alpha) degrees)
Collapse Sinon - Actions
Do nothing


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)
Collapse Si - Conditions
mouv[bas] Egal à  TRUE
Collapse Alors - Actions
Unité - Make u face ((Position of u) offset by 250.00 towards ((Facing of u) + 180.00) degrees) over 0.00 seconds
Collapse Sinon - Actions
Do nothing


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 Wink


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
Voir le profil de l'utilisateur Envoyer un message privé Envoyer l'e-mail Visiter le site web du posteur MSN Messenger
 Rommstein60
MODÉRATEUR À LA RETRAITE


Inscrit le: 23 Aoû 2007
Messages: 4764
Sujets: 136
Spécialité en worldedit: Keskesapeutfout'
Médailles: 1 (En savoir plus...)
Rédacteur de tuto #1 (Quantité : 1)

MessagePosté le: 14/08/08 21:30    Sujet du message: Citer

Mhhh ça m'a l'air en règle.
On va voir pour la passer en officiel.


Rolling Eyes

_________________
Leçon n°1 du WorldEdit : « Le violet > Troll-Brain »
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 super_mouton
Floodozaurus


Inscrit le: 21 Aoû 2007
Messages: 2071
Sujets: 51
Spécialité en worldedit: Harceller vos maps de critiques !! ';..;'
Médailles: 1 (En savoir plus...)
Rédacteur de tuto #3 (Quantité : 1)

MessagePosté le: 14/08/08 21:32    Sujet du message: Citer

Tient donc il me semble qu'il y avait déjà un tuto la dessus ? Shocked
Tu l'as refait ?
_________________
Dessine moi un Bizzardbizzare ! Very Happy
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé Envoyer l'e-mail
 Gevans
Back


Inscrit le: 21 Aoû 2007
Messages: 1930
Sujets: 85

Médailles: 2 (En savoir plus...)
Rédacteur de tuto #1 (Quantité : 1) Gevans (Quantité : 1)

MessagePosté le: 14/08/08 21:36    Sujet du message: Citer

super_mouton a écrit:
Tient donc il me semble qu'il y avait déjà un tuto la dessus ? Shocked
Tu l'as refait ?


Je ne crois pas
_________________
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
Voir le profil de l'utilisateur Envoyer un message privé Envoyer l'e-mail Visiter le site web du posteur MSN Messenger
 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...)
Rédacteur de tuto #3 (Quantité : 1) Grand mage créateur de sort (Quantité : 1)

MessagePosté le: 14/08/08 21:39    Sujet du message: Citer

Corrige moi si je me trompe mais tu ne gères pas l'appui simultané sur les flèches nan ?
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Gevans
Back


Inscrit le: 21 Aoû 2007
Messages: 1930
Sujets: 85

Médailles: 2 (En savoir plus...)
Gevans (Quantité : 1) Rédacteur de tuto #1 (Quantité : 1)

MessagePosté le: 14/08/08 21:41    Sujet du message: Citer

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
Voir le profil de l'utilisateur Envoyer un message privé Envoyer l'e-mail Visiter le site web du posteur MSN Messenger
 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...)
Grand mage créateur de sort (Quantité : 1) Rédacteur de tuto #3 (Quantité : 1)

MessagePosté le: 14/08/08 21:43    Sujet du message: Citer

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
Voir le profil de l'utilisateur Envoyer un message privé
 Gevans
Back


Inscrit le: 21 Aoû 2007
Messages: 1930
Sujets: 85

Médailles: 2 (En savoir plus...)
Gevans (Quantité : 1) Rédacteur de tuto #1 (Quantité : 1)

MessagePosté le: 14/08/08 21:46    Sujet du message: Citer

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
Voir le profil de l'utilisateur Envoyer un message privé Envoyer l'e-mail Visiter le site web du posteur MSN Messenger
 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...)
Grand mage créateur de sort (Quantité : 1) Rédacteur de tuto #3 (Quantité : 1)

MessagePosté le: 14/08/08 21:50    Sujet du message: Citer

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
Voir le profil de l'utilisateur Envoyer un message privé
 Gevans
Back


Inscrit le: 21 Aoû 2007
Messages: 1930
Sujets: 85

Médailles: 2 (En savoir plus...)
Gevans (Quantité : 1) Rédacteur de tuto #1 (Quantité : 1)

MessagePosté le: 14/08/08 21:52    Sujet du message: Citer

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
Voir le profil de l'utilisateur Envoyer un message privé Envoyer l'e-mail Visiter le site web du posteur MSN Messenger
 Anthelme
Anomalie floodiforme


Inscrit le: 28 Aoû 2007
Messages: 1857
Sujets: 93



MessagePosté le: 14/08/08 22:30    Sujet du message: Citer

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
Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger
 Askary
Membre a fort taux de post


Inscrit le: 22 Jan 2008
Messages: 970
Sujets: 24
Spécialité en worldedit: Gui


MessagePosté le: 15/08/08 08:57    Sujet du message: Citer

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
Voir le profil de l'utilisateur Envoyer un message privé
 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...)
Créateur de race (Quantité : 1) Grand décorateur (Quantité : 2)

MessagePosté le: 15/08/08 10:21    Sujet du message: Citer

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
Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger
 Askary
Membre a fort taux de post


Inscrit le: 22 Jan 2008
Messages: 970
Sujets: 24
Spécialité en worldedit: Gui


MessagePosté le: 15/08/08 10:25    Sujet du message: Citer

C'est quoi le jass ><

Moi je connais que le GUI donc je parle pour le GUI Razz
_________________
Pirates & Corsaires en cours de mapping.

Grand maître de la secte Bouh communément appelé Maître Bouh
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Keitaro_Ura
Floodozaurus


Inscrit le: 21 Aoû 2007
Messages: 2073
Sujets: 38
Spécialité en worldedit: Oui
Médailles: 1 (En savoir plus...)
Rédacteur de tuto #2 (Quantité : 1)

MessagePosté le: 15/08/08 10:57    Sujet du message: Citer

ça prend de la place dans le code.
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
Montrer les messages depuis:   
Poster un nouveau sujet   Répondre au sujet    Worldedit Index du Forum -> Tutoriels Toutes les heures sont au format GMT + 1 Heure
Aller à la page 1, 2, 3, 4, 5  Suivante
Page 1 sur 5

 
Sauter vers:  
Vous ne pouvez pas poster de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas voter dans les sondages de ce forum


Powered by phpBB © 2001, 2005 phpBB Group
Traduction par : phpBB-fr.com