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=33873dbb0f9d7e02deefc715eb328d44Mé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

Mouvements, glissades et rebonds
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...)
Gevans (Quantité : 1) Rédacteur de tuto #1 (Quantité : 1)

MessagePosté le: 27/08/07 10:04    Sujet du message: Mouvements, glissades et rebonds Citer

Avant tout je précise que c'est Ayane qui m'a appris la méthode que je vais décrire plus bas.

On va donc voir comment faire pour simuler un mouvement qui imite assez bien la réalité. Plus concrètement, on va créer une zone rectangulaire à l'intérieur de laquelle une balle (un feu follet) se déplacera seule suivant un angle qui lui sera donné. Du coup elle rebondira sur les parois jusqu'à s'arrêter.

Il est également très simple d'adapter ce système pour des glissades en enlevant la perte de vitesse.

I/ Un peu de physique

Bah non partez pas Sad ; c'est assez basique et c'est également obligatoire pour comprendre ce qu'il faut faire.
Lorsqu'une balle est mise en mouvement, elle est dotée d'une vitesse initiale, cette vitesse va diminuer en raison des forces de frottement de l'air sur la balle.
Il s'agit simplement de calculer l'évolution de cette vitesse au cours du temps et de déplacer la balle tant que celle-ci est encore assez importante.

Pour simuler le temps qui s'écoule, on a besoin d'un évènement périodique assez rapide car en réalité le mouvement ne sera pas fluide mais saccadé, le tout est de le faire assez vite pour que ça ne se remarque pas.

Il va nous falloir pour ce système 8 variables toutes de type réel:

  • Angle : l'angle de lancer
  • Vel_X : la composante horizontale de la vitesse
  • Vel_Y : la composante verticale de la vitesse
  • Power_X : la composante horizontale de la force appliquée à la balle
  • Power_Y : la composante verticale de la force appliquée à la balle
  • Masse : la masse de la balle (en kg)
  • Viscosite : la viscosité du milieu
  • Delta : l'intervalle de temps entre chaque image pour le mouvement


On a en fait besoin des composantes verticales et horizontales de la vitesse et de la force car en réalité il s'agit de vecteurs. C'est donc avec la variable Angle qu'on va pouvoir tout remettre en place.

Les 3 dernières sont en fait des constantes, voici quelques conseils pour régler leur valeur.

La masse : plus elle est grande, plus la mise en mouvement sera difficile, mais je pense que c'est assez intuitif de trouver le poids d'un objet.
La viscosité : plus elle est grande, plus le mouvement est difficile. Je vous conseil 0.8 car après plusieurs tests je trouve que ça rend pas mal.
Delta : plus delta sera petit, plus l'image sera fluide, mais pensez qu'il faut faire un periodic event (tous les delta secondes) donc le mieux est de 0.04.

Enfin il vous faut également une région dans laquelle vous voulez que se passe le mouvement (c'est important pour les rebonds). Dans l'exemple la région aura pour nom : Zone de Balle.

II/ Initialisation du tir

On commence à entrer dans le vif du sujet, il faut donc créer un nouveau déclencheur.
Dans celui-ci, on va récupérer les valeurs de Power_X et Power_Y à partir de la valeur de Angle.

En fait ce n'est pas bien compliqué, on sait que
Code:
cos(Angle) * Puissance = Power_X
sin(Angle) * Puissance = Power_Y


Le tout est de déterminer Angle et Puissance. Pour cela ça dépend totalement de vous donc je vous laisse faire (par exemple avec les touches du clavier pour viser ou en utilisant un sort ou même par entrée de texte...)

Ici mon évènement sera une simple pression de la touche Flèche Haut par le joueur 1.

Gui:
Trigger:
Collapse Evénements
Joueur - Joueur 1 (Rouge) Pressées the Flèche haut key
Conditions
Collapse Actions
Set Force_X = ((Cos(Angle)) x Puissance)
Set Force_Y = ((Sin(Angle)) x Puissance)
Set Vel_X = 0.00
Set Vel_Y = 0.00
Wait 2.00 seconds
Déclencheur - Add to Mise En Mouvement <gen> the event (Temps - Every Delta seconds of game time)
Déclencheur - Turn on Mise En Mouvement <gen>


Mise en mouvement est le nom du prochain déclencheur Smile . Vous voyez qu'on est obligé d'ajouter l'évènement périodique de cette manière car on ne peut pas le faire directement autrement.

III/ Mise en mouvement

Ici il va falloir gérer pleins de choses Very Happy . Tout d'abord on va calculer les nouvelles coordonnées de la vitesse (Vel_X et Vel_Y) pour cela on va utiliser une formule physique, mais comme on ne dispose pas de la variable temps, il faut utiliser la méthode d'Euler pour retrouver une approximation de leur valeur.

Gui:
Trigger:
Mise En Mouvement
Evénements
Conditions
Collapse Actions
-------- Calcul des coordonnées --------
Set Vel_X = (Vel_X + ((Force_X / Masse) x Delta))
Set Vel_Y = (Vel_Y + ((Force_Y / Masse) x Delta))
Set Vel_X = (Vel_X x (Power(Viscosite, Delta)))
Set Vel_Y = (Vel_Y x (Power(Viscosite, Delta)))


Voici donc les formules, faites bien attention aux parenthèses en les recopiant Wink .

Maintenant il va falloir gérer les contacts avec les parois. Pour cela on vérifie que la balle est bien dans la région (c'est-à-dire qu'elle n'est pas sur une des limites). Si c'est le cas, il faudra inverser la valeur de Vel_X dans le cas d'un contact avec les limites horizontales ou celle de Vel_Y dans le cas d'un contact avec les limites verticales.

Gui:
Trigger:
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
Collapse Si - Conditions
(Pos_X Inférieur ou égal à  (Min X of Zone de balle <gen>)) or (Pos_X Supérieur ou égal à  (Max X of Zone de balle <gen>))
Collapse Alors - Actions
Set Vel_X = (0.00 - Vel_X)
Collapse Sinon - Actions
Do nothing
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
Collapse Si - Conditions
(Pos_Y Inférieur ou égal à  (Min Y of Zone de balle <gen>)) or (Pos_Y Supérieur ou égal à  (Max Y of Zone de balle <gen>))
Collapse Alors - Actions
Set Vel_Y = (0.00 - Vel_Y)
Collapse Sinon - Actions
Do nothing


Rien de très compliqué ici, passons maintenant au mouvement proprement dit, c'est-à-dire à la modification des variables Pos_X et Pos_Y.

Gui:
Trigger:
-------- Mouvement --------
Set Pos_X = (Pos_X + (Vel_X x Delta))
Set Pos_Y = (Pos_Y + (Vel_Y x Delta))
Unité - Move Unit instantly to (Point(Pos_X, Pos_Y)), facing (Center of (Playable map area))


Je précise que Unit est la balle à faire bouger. Encore une fois on applique une formule physique pour calculer les nouvelles coordonnées puis on téléporte la balle au point nouvellement créé. Je vous l'ai dit il ne s'agit pas vraiment d'un mouvement, mais comme la balle se téléporte très rapidement sur des petites distances, ça donne bien l'impression qu'elle roule.

Maintenant vérifions l'arrêt, si vous avez regardé les formules utilisées, vous avez vu que Vel_X et Vel_Y ne s'annuleront jamais ou alors dans très longtemps. On doit donc vérifier que les deux sont proches de 0 et alors couper le déclencheur.

Avant cela il ne faut pas oublier de remettre à zéro Force_X et Force_Y pour ne pas que le mouvement reparte comme au début.

Gui:
Trigger:
-------- Remise à  zéro et vérification de l'arrêt --------
Set Force_X = 0.00
Set Force_Y = 0.00
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
Collapse Si - Conditions
(Vel_X Inférieur à  10.00) and (Vel_Y Inférieur à  10.00)
(Vel_X Supérieur à  -10.00) and (Vel_Y Supérieur à  -10.00)
Collapse Alors - Actions
Déclencheur - Turn off (This trigger)
Collapse Sinon - Actions
Do nothing


Et le tour est joué.

Le tuto est terminé, sachez que pour plus d'exactitude, il faudrait tenir compte des pertes de vitesse après les rebonds sur les parois mais là on tient déjà une bonne base à améliorer.

Si vous voulez adapter ce tuto pour un système de glissade, il vous suffit de retirer les frottements comme je l'ai dit plus haut, c'est-à-dire les lignes ou Vel_X et Vel_Y sont modifiés.
_________________
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 09/09/07 18:25; édité 2 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
 kapoka
Membre a fort taux de post


Inscrit le: 21 Aoû 2007
Messages: 915
Sujets: 47
Spécialité en worldedit: Faire des maps avec 500 déclos en GUI alors que 2 en JASS suffisent
Médailles: 1 (En savoir plus...)
Rédacteur de tuto #1 (Quantité : 1)

MessagePosté le: 27/08/07 12:16    Sujet du message: Citer

Il n'y avais pas un system plus simple pour la glisse ?
_________________
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
 Gaahh
Petit flooder


Inscrit le: 21 Aoû 2007
Messages: 1257
Sujets: 34
Spécialité en worldedit: Spécialité en worldedit:


MessagePosté le: 27/08/07 12:22    Sujet du message: Citer

Il parle pour la glisse avec rebond je suppose
_________________
Signature:
Ceci est un bloc de texte qui peut être ajouté aux messages que vous postez. Il y a une limite de 700 caractères
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...)
Gevans (Quantité : 1) Rédacteur de tuto #1 (Quantité : 1)

MessagePosté le: 27/08/07 13:14    Sujet du message: Citer

Non mais si tu veux une glisse uniforme c'est très facile, il suffit de téléporter très rapidement l'unité en suivant l'angle à une petite distance devant elle.
_________________
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
 metyknight
Membre honoraire


Inscrit le: 21 Aoû 2007
Messages: 214
Sujets: 6



MessagePosté le: 27/08/07 13:29    Sujet du message: Citer

Genial Smile quand j'aurai le temp j'integrerais tout sa à mon système de conduite deja assez avancé Wink
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Bantas
Anomalie floodiforme


Inscrit le: 21 Aoû 2007
Messages: 1524
Sujets: 37

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

MessagePosté le: 27/08/07 17:09    Sujet du message: Citer

J'ai posté une fonction jass qui permet de reproduire un mouvement réaliste. Sans les rebonds par contre.
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 FitZ
Membre récent


Inscrit le: 25 Aoû 2007
Messages: 69
Sujets: 12
Spécialité en worldedit: Vulgarisateur de connaissance
Médailles: 1 (En savoir plus...)
Rédacteur de tuto #1 (Quantité : 1)

MessagePosté le: 27/08/07 19:02    Sujet du message: Citer

J'ai essayé et c'est impressionant Shocked ! Avec ce genre de trigger on pourrait carrément cré un nouveau jeu avec des escaliers ou le perso doit rebondir tout en évitant des monstres et avec des pièces a récoltées lol.
Bref beau trigger.
_________________
Quand tu es poursuivi, l'important n'est pas de courir plus vite que tes poursuivants, mais plus vite que tes potes. (proverbe gobelin)
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...)
Rédacteur de tuto #1 (Quantité : 1) Gevans (Quantité : 1)

MessagePosté le: 28/08/07 10:32    Sujet du message: Citer

FitZ a écrit:
J'ai essayé et c'est impressionant Shocked ! Avec ce genre de trigger on pourrait carrément cré un nouveau jeu avec des escaliers ou le perso doit rebondir tout en évitant des monstres et avec des pièces a récoltées lol.
Bref beau trigger.


Oui mais dans ce cas il faut aussi tenir compte de la composante z de la vitesse et du mouvement, or en Gui c'est impossible je crois (enfin avec 1 ou 2 custom script ça passe, Ayane avait fait une map comme ça je crois).


metyknight a écrit:
Genial Smile quand j'aurai le temp j'integrerais tout sa à mon système de conduite deja assez avancé Wink


Pour un système de conduite, il faut prendre en compte le fait que la vitesse ne diminue pas au cours du temps parce que tu peux réaccélerer, donc c'est un peu plus complexe, il faut définir une vitesse maximale et penser que plus on maintient longtemps appuyé le bouton pour avancer, plus la vitesse augmente.

Ayane (encore une fois ^^ ) avait fait un tuto sur les boucles conditionnelles en GUI qui permettait de tester si le bouton était maintenu appuyé. Si je retrouve une certaine map j'essaierai de refaire le tuto.
_________________
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
 Byakugan64
Membre honoraire


Inscrit le: 22 Aoû 2007
Messages: 251
Sujets: 17



MessagePosté le: 28/08/07 12:55    Sujet du message: Citer

Ya pas toutes les variables de marquées!!
Pos_x, Pos_y, Power, Min x, Max x.

Sinon ce serait simpa de faire un genre de mini-golf avec ce système ^^
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger
 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: 28/08/07 12:59    Sujet du message: Citer

Min X n'est pas une variable, Power_X et Power_Y sont marqués.

Sinon ouai on peut faire un minigolf (moi j'avais fait un billard avec). La seule difficulté est de gérer tous les contacts en fait.
_________________
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
 metyknight
Membre honoraire


Inscrit le: 21 Aoû 2007
Messages: 214
Sujets: 6



MessagePosté le: 16/09/07 17:21    Sujet du message: Citer

General Vans a écrit:
Ayane (encore une fois ^^ ) avait fait un tuto sur les boucles conditionnelles en GUI qui permettait de tester si le bouton était maintenu appuyé. Si je retrouve une certaine map j'essaierai de refaire le tuto.


[AS]dsl de remonter ce tuto mais j avais pas vu le post de general vans.
Le système de Ayane c pour verifié n'importe quel touche ?Parce que pour la conduite je n utilise que les flèches car plus pratique, mais jaurais besoin de d autre touche avec une telle verification .
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 kapoka
Membre a fort taux de post


Inscrit le: 21 Aoû 2007
Messages: 915
Sujets: 47
Spécialité en worldedit: Faire des maps avec 500 déclos en GUI alors que 2 en JASS suffisent
Médailles: 1 (En savoir plus...)
Rédacteur de tuto #1 (Quantité : 1)

MessagePosté le: 07/02/08 20:38    Sujet du message: Citer

Quand mon mec va dans le région je fait fleche haut et ca plante Oo

Il était sensé glisser non?
_________________
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: 07/02/08 20:44    Sujet du message: Citer

tient, je n'avais jamais pris la peine de lire ce tuto, à chaque appui sur la flèche haut tu ajoutes un event periodique o_O
_________________
Le violet, c'est moche.
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...)
Rédacteur de tuto #1 (Quantité : 1) Gevans (Quantité : 1)

MessagePosté le: 07/02/08 21:24    Sujet du message: Citer

Ah oui effectivement, il faudrait retirer l'événement.
_________________
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
 Broyeur
Membre récent


Inscrit le: 21 Aoû 2007
Messages: 80
Sujets: 3



MessagePosté le: 07/02/08 21:37    Sujet du message: Citer

On peut faire un lance-balle comme ça ? Genre ça lance la balle, et dès qu'elle s'arrête, elle disparait est une autre et lancée ?
_________________
Projet en cours : Eeeeh trop !
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