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: 27/08/07 10:04 Sujet du message: Mouvements, glissades et rebonds |
|
|
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 ; 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.
Mise en mouvement est le nom du prochain déclencheur . 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 . 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.
Voici donc les formules, faites bien attention aux parenthèses en les recopiant .
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) If (All Conditions are True) then do (Then Actions) else do (Else Actions) |
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) |
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 |
|
|
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...)
|
Posté le: 27/08/07 12:16 Sujet du message: |
|
|
Il n'y avais pas un system plus simple pour la glisse ? _________________
|
|
Revenir en haut |
|
|
Gaahh Petit flooder
Inscrit le: 21 Aoû 2007 Messages: 1257 Sujets: 34 Spécialité en worldedit: Spécialité en worldedit:
|
Posté le: 27/08/07 12:22 Sujet du message: |
|
|
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 |
|
|
Gevans Back
Inscrit le: 21 Aoû 2007 Messages: 1930 Sujets: 85
Médailles: 2 (En savoir plus...)
|
Posté le: 27/08/07 13:14 Sujet du message: |
|
|
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 |
|
|
metyknight Membre honoraire
Inscrit le: 21 Aoû 2007 Messages: 214 Sujets: 6
|
|
Revenir en haut |
|
|
Bantas Anomalie floodiforme
Inscrit le: 21 Aoû 2007 Messages: 1524 Sujets: 37
Médailles: 1 (En savoir plus...)
|
Posté le: 27/08/07 17:09 Sujet du message: |
|
|
J'ai posté une fonction jass qui permet de reproduire un mouvement réaliste. Sans les rebonds par contre. _________________
|
|
Revenir en haut |
|
|
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...)
|
|
Revenir en haut |
|
|
Gevans Back
Inscrit le: 21 Aoû 2007 Messages: 1930 Sujets: 85
Médailles: 2 (En savoir plus...)
|
|
Revenir en haut |
|
|
Byakugan64 Membre honoraire
Inscrit le: 22 Aoû 2007 Messages: 251 Sujets: 17
|
Posté le: 28/08/07 12:55 Sujet du message: |
|
|
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 |
|
|
Gevans Back
Inscrit le: 21 Aoû 2007 Messages: 1930 Sujets: 85
Médailles: 2 (En savoir plus...)
|
Posté le: 28/08/07 12:59 Sujet du message: |
|
|
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 |
|
|
metyknight Membre honoraire
Inscrit le: 21 Aoû 2007 Messages: 214 Sujets: 6
|
Posté le: 16/09/07 17:21 Sujet du message: |
|
|
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 |
|
|
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...)
|
Posté le: 07/02/08 20:38 Sujet du message: |
|
|
Quand mon mec va dans le région je fait fleche haut et ca plante Oo
Il était sensé glisser non? _________________
|
|
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: 07/02/08 20:44 Sujet du message: |
|
|
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 |
|
|
Gevans Back
Inscrit le: 21 Aoû 2007 Messages: 1930 Sujets: 85
Médailles: 2 (En savoir plus...)
|
Posté le: 07/02/08 21:24 Sujet du message: |
|
|
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 |
|
|
Broyeur Membre récent
Inscrit le: 21 Aoû 2007 Messages: 80 Sujets: 3
|
Posté le: 07/02/08 21:37 Sujet du message: |
|
|
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 |
|
|
|