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

Flash Discussion :

[FLASH MX PRO] effet mouvement clip


Sujet :

Flash

  1. #1
    Membre du Club
    Inscrit en
    Juillet 2003
    Messages
    85
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 85
    Points : 50
    Points
    50
    Par défaut [FLASH MX PRO] effet mouvement clip
    bonjour,

    J'aimerais faire déplacer un clip d'un point A à un point B en AS. Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    monClip._x += nbpixel;
    Mais j'aimerais donner un effet de ralentissement au moment où le clip arrive au point B.

    Il faudrait donc que mon clip se déplace de 50 pixel, puis 40, puis 30 ... puis 5 puis 2 par exemple pour que le clip semble ralentir au moment où il arrive.

    Il me semble qu'il existe un fonction mathématique qui permette un tel mouvement mais je ne l'ai pas trouvé.

    Merci d'avance

  2. #2
    Expert éminent

    Avatar de freegreg
    Profil pro
    Inscrit en
    Août 2002
    Messages
    4 376
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Août 2002
    Messages : 4 376
    Points : 8 779
    Points
    8 779
    Par défaut
    Salut,

    regarde ce lien http://www.robertpenner.com/easing/
    Tu devrais trouver ton bonheur
    Avant toutes questions, consultez nos différentes ressources disponibles gratuitement : XML, Développement Web, Flash/Flex, (X)HTML, CSS, JavaScript, AJAX, ASP
    Offres d'emploi développeur Web

  3. #3
    Membre du Club
    Inscrit en
    Juillet 2003
    Messages
    85
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 85
    Points : 50
    Points
    50
    Par défaut
    j'ai réussi à faire marcher une fonction qui me permette de calculer les pixels comme je le voulais.

    Mon problème, c'est que les temps de calculs sont tellement rapide que l'effet est invisible, ca fait comme si le bloc se déplace d'un seul coup.

    Quelqu'un n'aurait pas une idée pour que ca soit plus visible ?

  4. #4
    Membre averti
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2003
    Messages
    302
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2003
    Messages : 302
    Points : 316
    Points
    316
    Par défaut
    Salut,

    J'ai travaillé la dessus hier meme et le résultat est visible :

    J'ai fait une petite fusé qui avance quand on appuye sur la flèche du haut.
    Tout ce que je fait c'est que je lui donne une certaine vitesse quand j'appuye sur la flèche du haut,et cette vitesse augmente tant que je maintient la touche enfoncée et tant qu'elle n'a pas atteint une certaine vitesse maximale (voir le code) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    onClipEvent (keyDown) {
      if (Key.getCode() == Key.UP) {
          if (vitesse<30) { // Vitesse maximal = 30 pixel par frame (image)
              vitesse += 5;
          }
      }
    }
    Voilà,pour l'instant tout ce que je fait c'est donner de la vitesse à ma fusée,mais maintenant il faut la faire avancer.

    Il faut que la fusée avance selon son orientation (propriété _rotation),ç à dire que si elle est dirigé vers l'est il faut qu'elle avance vers l'est si elle est dirigé vers l'ouest il faut qu'elle avance vers l'ouest etc...

    Pour cela la formule mathématique est simple.Il faut savoir que l'axe du clip (l'axe de rotation) est une droite qui a pour pente (direction) tangente de l'angle qu'il fait avec l'axe des (x).Cet angle est stock automatiquement par flash dans la propriéte _rotation.

    Si le clip doit avancer,il doit avancer sur une droite portée par la direction de son axe de rotation.Donc il faut ajouter à x et à y des proportions tels que aprés cet ajout le clip reste toujours sur la meme droite (mouvement rectiligne).

    Sachant que Y/X représente la meme quantité que SIN/COS (la pente) il faut donc ajouté à Y une constante * SIN et à X la meme constante * COS pour garder les meme proportions.

    Pour que la fusé décélère,il faut lui diminuer sa vitesse.Mais attention,on ne diminue que si la vitesse est positive,sinon la vitesse passe en dessous de 0 et ton clip se deplacera ira dans le sens inverse.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    onClipEvent (enterFrame) {
    this._x += math.cos(math.PI/180*this._rotation)*vitesse;
    this._y += math.sin(math.PI/180*this._rotation)*vitesse;
    	if (vitesse) {
    		vitesse--;
    	}
    }

    J'éspère que ça pourra t'aider !

    Tu peux voir le résultat ici :

    http://perso.wanadoo.fr/ychaouche/racine/fuse.swf

  5. #5
    Membre du Club
    Inscrit en
    Juillet 2003
    Messages
    85
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 85
    Points : 50
    Points
    50
    Par défaut
    En fait, l'adresse que m'a donné freegreg est exactement ce qu'il me faut mais je pense que j'ai mal utilisé la fonction ...

    Par exemple j'aimeré utilisé la fonction suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    // t: current time, b: beginning value, c: change in value, d: duration, a: amplitude (optional), p: period (optional)
    // t and d can be in frames or seconds/milliseconds
     
    Math.easeOutElastic = function (t, b, c, d, a, p) {
    	if (t==0) return b;  if ((t/=d)==1) return b+c;  if (!p) p=d*.3;
    	if (a < Math.abs(c)) { a=c; var s=p/4; }
    	else var s = p/(2*Math.PI) * Math.asin (c/a);
    	return a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b;
    };
    mais malheureusement je n'arrive pas à l'utiliser corectement. Est-ce que quelqu'un saurais comment il faut s'en servir ?

  6. #6
    Membre du Club
    Inscrit en
    Juillet 2003
    Messages
    85
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 85
    Points : 50
    Points
    50
    Par défaut
    j'ai trouvé une autre fonction sur le net qui permet de donner un effet elastique lors du mouvement.
    voici le code
    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
     
    /*******************************************************
                         elastic
    /*******************************************************
     
    movieclip.prototype.Elastic = function(retourx,retoury,ralenti,cool){
            speedx = speedx*ralenti+(retourx-this._x)*cool;
            speedy = speedy*ralenti+(retoury-this._y)*cool;
            this._x += speedx;
            this._y += speedy;
    }
     
     
     
     
      UTILISATION - COMMENTAIRE DE L'AUTEUR 
     
     
    onClipEvent (enterframe) {
            Elastic(_root._xmouse,_root._ymouse,.9,.3);//par exemple...
    }

    Elle fonctionne. Il suffit de mettre dans retourx et retoury les coordonnées d'arrivée du clip

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 29/11/2006, 18h59
  2. [FLASH MX2004 PRO] Pile de clips dynamique
    Par guy2004 dans le forum Flash
    Réponses: 4
    Dernier message: 09/03/2006, 17h11
  3. Réponses: 2
    Dernier message: 22/02/2006, 11h15
  4. [FLASH MX2004 Pro] Textes dynamiques et effets
    Par djo.mos dans le forum Flash
    Réponses: 1
    Dernier message: 25/09/2005, 12h04
  5. Réponses: 1
    Dernier message: 15/08/2005, 16h38

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