Forums Développement Multimédia

Aller au contenu

Trajectoire missile sur l'axe x/y

CODE

11 réponses à ce sujet

#1 gourdjer

    Ceinture Blanche

  • Members
  • Pip
  • 5 messages

Posté 12 September 2011 - 23:14 PM

Bonsoir tout le monde,

Pour un projet personnel je me fait un petit jeu en actionscript2 (le 3 étant ma faiblesse, oui je sais c'est pas bien!!!), le but du jeu étant d'éliminer des sales dindons (même si ça ne vole pas mais bon c'est pour le fun) essayant de traverser un champs de maïs, pour cela vous avez un canon qui s'oriente en fonction de la position de la souris dont les missiles sont des épis de maïs (original oui je sais).

Voila pour le contexte :), j'ai récupéré l'orientation du canon (avec _rotation) au moment où on tir un missile et l'appliquer sur celui-ci, mais j'ai du mal à déplacer le missile en "diagonale" en fonction de son orientation, j'ai chercher un peu (et pris une feuille un crayon et fait ce que la plupart détesté le plus en cours... LES MATHS), je vous avoue que moi j'aimais un peu les Math ^^ (là n'est pas la question).

Enfin bref je suis arrivé à un truc du genre Math.tan(missile._rotation) = Math.tan(missile._rotation)/1, j'ai fait plein de vérification et ça se vérifie à chaque fois. Pour vous expliquer mon raisonnement je me suis basé sur une formule du genre :

tanC = y / x (voir schema)
Image IPB

par la suite je dit dans mon code que une fois que mon missile et mit sur la scène et selon sont orientation [j'ai posx qui prend soit 1 soit -1 selon l'orientation et posy = Math.tan(missile._rotation)] mon missile se déplacerais constamment de la manière suivante :

missile._x += posx;
missile._y += posy;

Le résultat est vraiment pas terrible :s, ça part presque dans tout les sens mais plus sur la hauteur que sur la largeur et ça part même vers le bas.

Quelqu'un serait-il comment résoudre mon problème?
Et j'ai une autre question, comment je pourrais faire apparaitre mon missile sur le bout du canon? (actuellement il apparait sur même axe des x que la souris et sur une hauteur fixe de 400px)

Désoler du long poste (j’espère que le fait que ce soit trop long ne le rend pas incompréhensible)

#2 frangois

    Ceinture Noire

  • Members
  • PipPipPipPipPipPipPip
  • 224 messages

Posté 13 September 2011 - 09:14 AM

La position d'un solide S à un instant (t) est la somme de toutes les forces dont il est l'objet.

Ici ton objet est soumis à son vecteur vélocité noté (v), et à la gravité notée (g).

v.x = composante horizontale de la vélocité.
v.y = composante verticale de la vélocité.

g n'a qu'une composante verticale.

A chaque frame (onEnterFrame) tu fais :


v.y = v.y + g.y;

S.x = S.x + v.x;
S.y = S.y + v.y;
 

Attention le repère de Flash est inversé, donc v aura comme valeurs initiales:
v.x = 10;
v.y = -10;

v.y doit être négatif.

g.y = 1;

g.y est normalement négatif, dans Flash toujours positif.

Là tu auras une courbe parfaite.

--

Tu aurais pu calculer ta courbe à partir de son équation, qui est là : http://fr.wikipedia....ire_parabolique

MAIS pour un jeu c'est naze, ce n'est pas la bonne piste, puisque tu aurais dû aussi calculer la vitesse à chaque frame, donc ce sera plus lourd. En effet, ton projectile va bien décrire la bonne courbe, mais sa vitesse aurait été constante, ce qui n'est pas réaliste (en effet, en haut de la trajectoire, la vitesse d'un projectile est nulle).

Il vaut mieux faire une simple somme de vecteurs que passer par l'équation de la courbe.

Modifié par frangois, 13 September 2011 - 09:16 AM.

Je suis dispo en free-lance. Et j'ai un blog.

#3 Billyben

    KlouChiPonshoñistäs

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 2597 messages

Posté 13 September 2011 - 09:20 AM

Salut, alors demande de petite précision : Ton jeu est il en vue de haut ou de coté?
je ne sais pas pourquoi, mais ma première impression a été que tu développais un jeu en vue de dessus/haut.... (parce que le bout de code de Frangois implique une vue de coté... enfin, y'a que la gravité à virer cependant ( peu près)...)

#4 gourdjer

    Ceinture Blanche

  • Members
  • Pip
  • 5 messages

Posté 13 September 2011 - 09:34 AM

Pour préciser mon jeu est en fausse perspective, je m'explique (je vous ferais un schéma en fin d'après midi/ soirée, là j'ai pas trop le temps :s -> réponse rapide) imaginez vous un canon tout en bas au milieu pointant vers le haut(sachant que l'orientation est décidé par la position de la souris) et les cibles viens de la droite pour aller vers la gauche, pour ce qui est des projectiles ils partent du canon (du moins la pas encore je les expliquer en haut) et vont vers le haut tout en sachant que leur taille diminue (avec xscale et yscale pour donner une impression qu'il s'enfonce dans le décor), et lorsque xscale < 5 je retire le clip de la scène.

Pour autre précision la collision sera possible dans une intervalle du xscale, avant ou après le missile est hors de portée des cibles(histoire de mettre un peu de difficulté).

Donc la parabolique me semble pas adapté (mais merci quand même c'est génial d'avoir une réponse ^^), je cherche plus simplement à avoir une trajectoire selon un vecteur définie par son angle d'orientation. par contre j'avoue que le coup de la vélocité même si on prend pas en compte la gravité ça peux aboutir!

Modifié par gourdjer, 13 September 2011 - 09:35 AM.


#5 gourdjer

    Ceinture Blanche

  • Members
  • Pip
  • 5 messages

Posté 18 September 2011 - 15:45 PM

Bonjour, désoler pour le retour tardive sur ce poste (j'ai était fort occupé en ce moment), enfin bref voici le dû je vous est fait un schéma pour expliquer ma situation.

Image IPB

Le Canon s'oriente en fonction de la souris comme dit précédemment et le lors du clique j'attache un clip "Missile" qui prend l'orientation du Canon à l'instant T du clique. Les cibles apparaissent dans une zone prédéfinie et selon l'axe y sur lesquelles ils apparaissent il ont une taille différentes (pour la notion de profondeur). Donc le missile part du canon (ou devrais pour l'instant il prend la position en x de la souris et a une hauteur fixe de 300 sur y) monte et diminue de taille (avec la fameuse propriété _xscale et _yscale toujours pour la notion de profondeur) enfin bref voila.

Pour remettre le problème en question je voudrais que comme dans le schéma ci-dessus le missile suive la trajectoire en magenta? Et de faire apparaitre le missile sur l'axe des x et des y selon l'orientation du canon (j'utilise actuellement le fonction _rotation).

#6 kamtron

    Ceinture Marron

  • Members
  • PipPipPipPipPipPip
  • 156 messages

Posté 18 September 2011 - 22:54 PM

Citation

Donc le missile part du canon (ou devrais pour l'instant il prend la position en x de la souris et a une hauteur fixe de 300 sur y)

pas compris.
le canon suit la position X de la souris à une hauteur fixe ?

si c'est bien ça, ça va être difficile de calculer un angle si le décalage souris / canon est de 0.

mmvoyez ?

#7 kamtron

    Ceinture Marron

  • Members
  • PipPipPipPipPipPip
  • 156 messages

Posté 19 September 2011 - 00:34 AM

un exemple mais avec le canon statique

Fichier(s) joint(s)



#8 tlecoz

  • Honoris
  • PipPipPipPipPipPipPipPip
  • 3486 messages

Posté 19 September 2011 - 08:57 AM

Hello !

Personnellement, j'utiliserai la méthode décrite par Frangois ; j'ajouterai seulement une propriété 'z' qui s'incrémenterait du début à la fin d'un tir sur laquelle je me baserai pour calculer le rétrécissement du projectile.

++

#9 gourdjer

    Ceinture Blanche

  • Members
  • Pip
  • 5 messages

Posté 19 September 2011 - 19:36 PM

kamtron, non c'est le missile qui prend le x de la souris et qui a une hauteur fixe pour définir son point d'apparition, le canon à aucun problème mais je vais quand même regarder ce que tu me propose.

tlecoz, je n'est aucun problème avec le rétrécissement de mon missile j’expliqué juste le contexte sur ce point et je ne pense pas qu'en actionscript2 ont puisse gérer les axes z (à me confirmer).

Le problème ce situe que dans le missile et rien d'autre, et par rapport à ça la trajectoire et le point d'apparition en fonction de son angle (dans un repère y/x).

#10 gourdjer

    Ceinture Blanche

  • Members
  • Pip
  • 5 messages

Posté 19 September 2011 - 19:44 PM

kamtron c'est exactement ce que je veux faire!!! =D
Mais j'ai regardé tes fichier et le fla j'ai pas pu l'ouvrir malgré que j'ai la CS5 :/, mais les deux fichier AS j'ai pu les ouvrir, à toi de me confirmer mais il me semble que ce soit de l'AS3.

Mais sinon c'est ça :D

Actuellement mon canon bouge comme le tient mais mes missile ne suis pas la direction vers lequel le canon vise.

#11 tlecoz

  • Honoris
  • PipPipPipPipPipPipPipPip
  • 3486 messages

Posté 19 September 2011 - 22:57 PM

ah d'accord !

Alors...

rentre dans ton clip qui contient le canon,
positionne l'axe de rotation du canon au niveau de l'axe de rotation du clip (la petite croix quand tu rentre dans un clip) et tourne le canon de tel manière qu'il soit dirigé totalement vers le droite ; cette position correspond à _rotation = 0.

Ensuite au niveau du code, ca fait longtemps que j'ai pas fait d'AS2, mais ca devrait donner quelque chose du genre


var angle:Number;
var radian:Number = Math.PI/180;
var gravityAdd:Number = 0.9;
var maxZ:Number = 1000;
var missile:MovieClip;
var power:Number = 30;

canon.onMouseMove = function(){
   angle = Math.atan2(_ymouse,_xmouse);
   this._rotation = angle / radian;
}

onRelease = function(){
   missile = attachMovie("missile","missile",getNextHighestDepth());
   missile.speedX = Math.cos(angle) * power;
   missile.speedY = Math.sin(angle) * power;
   missile.speedZ = power;
   missile.gravity = 0;
   missile.zPosition = 0;
}

onEnterFrame = function(){

   if(missile){
      missile.gravity += gravityAdd;
      missile.speedY += missile.gravity;
      missile._x += missile.speedX;
      missile._y += missile.speedY;
      missile.zPosition += missile.speedZ;
      if(missile.zPosition > zMax) missile.zPosition = zMax;      
      missile._xscale = missile._yscale = (zMax - missile.zPosition) / zMax;
   }
}
 

J'ai pas testé mais je pense que ca devrait marcher (en tout cas le principe est là)

++

#12 kamtron

    Ceinture Marron

  • Members
  • PipPipPipPipPipPip
  • 156 messages

Posté 20 September 2011 - 12:38 PM

Voir le messagegourdjer, le 19 September 2011 - 19:44 PM, dit :

kamtron c'est exactement ce que je veux faire!!! =D
Mais j'ai regardé tes fichier et le fla j'ai pas pu l'ouvrir malgré que j'ai la CS5 :/, mais les deux fichier AS j'ai pu les ouvrir, à toi de me confirmer mais il me semble que ce soit de l'AS3.

Mais sinon c'est ça :D

Actuellement mon canon bouge comme le tient mais mes missile ne suis pas la direction vers lequel le canon vise.

ah désolé! je suis arrivé dans ton sujet au niveau de l'image où tu expliquais ce que tu souhaitais faire.. j'avoue ne pas avoir jeté de coup d'oeil à ton premier message.. :lol:

Modifié par kamtron, 20 September 2011 - 12:38 PM.




1 utilisateur(s) li(sen)t ce sujet

0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)