IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ActionScript 1 & ActionScript 2 Discussion :

Tir en mouvement à 360° sur un plan 2D (comment conserver une trajectoire rectiligne ?)


Sujet :

ActionScript 1 & ActionScript 2

  1. #1
    Membre confirmé
    Inscrit en
    Mars 2009
    Messages
    77
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 77
    Par défaut Tir en mouvement à 360° sur un plan 2D (comment conserver une trajectoire rectiligne ?)
    Bonjour,

    Je rencontre un problème avec les angles de tir à 360°. Voici le problème :

    Un vehicule (Ship) se deplace sur un plan 2d avec une vue de dessus.
    Il tire des projectiles (Missile) autour de lui selon une certain angle (le véhicule tourne sur lui même et tire à 360° comme un tank) qui se déplacent en ligne droite.

    Ship et Missile
    sont deux classe pour le véhicule et les projectiles.

    Classe Ship :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    class Ship extends MovieClip 
    {
    var vitesse;
    var x;
    var y;
    function onLoad()
    {
    	vitesse=0;
    	x=0;
    	y=0;
    }
    function onEnterFrame()
    {
    if (Key.isDown(Key.UP)) vitesse += 1; //acceleration en avant
    if (Key.isDown(Key.DOWN)) vitesse -= 0.2; //acceleration en arrière
    if (Key.isDown(Key.LEFT)) _rotation -= 8; 
    if (Key.isDown(Key.RIGHT)) _rotation += 8;
     
    if (Math.abs(vitesse)>1) vitesse *= 0.9; // limite l'acceleration
     
    x = Math.cos(_rotation*(Math.PI/180))*vitesse; 
    // donne la position x future en fonction de la vitesse
    y = Math.sin(_rotation*(Math.PI/180))*vitesse; 
    // donne la position y future en fonction de la vitesse
     
    	_x += x;
    	_y += y;
     
    	if( Key.isDown(Key.SPACE))
    	{
    var missile = _root.attachMovie( 
      "Missile" , 
      "Missile" + _root.getNextHighestDepth(), 
      _root.getNextHighestDepth() );
    		missile._x = _x;
    		missile._y = _y;
    	}
    }}
    Class Missile :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    class Missile extends MovieClip 
    {
    	var x;
    	var y;
    	var iii;
     
    	function onLoad() 
    	{	
    		speed = 20;		
    	}
    	function onEnterFrame()
    	{
    // donne la position x future en fonction de la vitesse
    x = Math.cos(Ship._rotation*(Math.PI/180))*speed; 
     
    // donne la position y future en fonction de la vitesse
    y = Math.sin(Ship._rotation*(Math.PI/180))*speed; 
     
    		_x += x*speed;
    		_y += y*speed;
    	}
    }
    Le probleme est avec les projectiles.
    Ceux ci ont une vitesse
    et sont tirés d'après un angle (360° autour du véhicule)

    Seulement avec les deux classes que j'ai, tel quel, en me basant sur l'angle du véhicule :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    // donne la position x future en fonction de la vitesse
    x = Math.cos(Ship._rotation*(Math.PI/180))*speed; 
    // donne la position y future en fonction de la vitesse
    y = Math.sin(Ship._rotation*(Math.PI/180))*speed;
    J'obtient l'angle du véhicule

    Le problème est que le vehicule change ensuite de position et le missile se met à faire n'importe quoi.

    Je cherche donc une solution pour que le missile conserve sa trajectoire avec l'angle initial du véhicule (l'angle du véhicule au moment ou à été tiré le projectile) afin qu'il se propage de façon rectiligne

    Si je n'ai pas été assez clair dites le moi,
    je suis pour le moment encore en train d'apprendre,
    et suis preneur de toute aide sur le tir en mouvement à 360° sur un plan 2d

    Merci d'avance pour votre aide

  2. #2
    Membre confirmé
    Inscrit en
    Mars 2009
    Messages
    77
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 77
    Par défaut
    J'ai également essayé ceci pour le missile :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    function onLoad() 
    	{
    		var x;
    		var y;
    		var speed;
    		var iii;
     
    		speed = 20;
    		iii=0;	
    	}
    	function onEnterFrame()
    	{
    		if( iii < 1) 
    		{
    			iii += 1;
    			x = Math.cos(_root.Ship._rotation*(Math.PI/180));
    			y = Math.sin(_root.Ship._rotation*(Math.PI/180));
    		}
     
    		_x += x*speed;
    		_y += y*speed;
     
    	}
    En pensant que x et y garderons la même valeur mais sa ne marche pas non plus.

  3. #3
    Rédacteur/Modérateur
    Avatar de beekeep
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    2 005
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 2 005
    Par défaut
    Bonjour,

    il faut utiliser la rotation du missile qui est constante et non celle du véhicule.
    avant il faut initialiser la rotation du missile lors du attachMovie.

    > remplacer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    x = Math.cos(Ship._rotation*(Math.PI/180))*speed;
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    x = Math.cos(this._rotation*(Math.PI/180))*speed;
    je met un exemple en PJ
    Fichiers attachés Fichiers attachés

Discussions similaires

  1. Pb de Text. transp. sur un plan directx 9 c#
    Par EPSFranck dans le forum DirectX
    Réponses: 3
    Dernier message: 02/09/2006, 11h56
  2. Ombre sur un plan fixe
    Par damienlann dans le forum OpenGL
    Réponses: 4
    Dernier message: 30/05/2006, 15h14
  3. [Physique] Balle rebondissant sur un plan,problème de frames
    Par oxyde356 dans le forum Algorithmes et structures de données
    Réponses: 9
    Dernier message: 16/02/2006, 18h11
  4. [SQL2K] Pb sur un plan de maintenance
    Par yinyang dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 14/02/2006, 10h44
  5. Réponses: 3
    Dernier message: 29/06/2005, 14h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo