Taille d'un clip déterminé en fonction de la distance souris - clip

Angoria
Messages postés
8
Date d'inscription
vendredi 28 avril 2006
Statut
Membre
Dernière intervention
21 novembre 2006
- 26 oct. 2006 à 16:23
Angoria
Messages postés
8
Date d'inscription
vendredi 28 avril 2006
Statut
Membre
Dernière intervention
21 novembre 2006
- 26 oct. 2006 à 21:23
Bonjour à tous.

J'essaie de tapper un code simple et clair pour que lorsqu'on approche la souris d'un clip ce clip grossisse en taille. J'ai réussi à faire...l'inverse. J'arrive à faire diminuer de taille un clip lorsque la souris s'approche, seulement j'ai essayé toutes les formules mathématiques possibles et inimaginables, je n'ai pas trouvé comment faire l'effet inverse. Voici le script sur mon clip :

onClipEvent (mouseMove) {
 xnormal = _x;
 ynormal = _y;
 xmouse = _root._xmouse;
 ymouse = _root._ymouse;
 xdist = xmouse-xnormal;
 ydist = ymouse-ynormal;
 if (xdist<=200) {
  _xscale = xdist;                    // c'est là que je cherche la bonne formule mathématique !
  _yscale = ydist;                    // idem
 } else {
  _xscale = 100;
  _yscale = 100;
 }
}

(oui, en effet je veux une portée qui ne dépasse pas 200).
Je précise aussi qu'il n'y aura pas qu'un seul clip sur la scène, mais un bon nombre, et s'il faut faire des modifications ça serait bête de copier-coller l'AC sur chaque clip...J'ai donc tenté de collé le script dans un sous-clip, seulement tous mes clips réagissent de la même manière par rapport aux distances.

Merci de votre aide...

3 réponses

atchoumdu51
Messages postés
194
Date d'inscription
jeudi 1 janvier 2004
Statut
Membre
Dernière intervention
16 juillet 2007
1
26 oct. 2006 à 16:56
Bonjour,
je te propose une petite solution qui te permet de choisir ton maximum de grossissemment par le biais de rapport max (taille max/taille au départ). Et en 200 ton clip aura pour taille la taille originale


var rapportMax = 2;
_xscale = rapportMax*100-xdist*(100-rapportMax)/200;
_yscale =


rapportMax*100-ydist


*(100-rapportMax)/200


;

Pour indication la recherche se fait en se disant: en 0 je veux que mon clip fasse cette taille et en 200 cette taille, ce qui te donne deux points et donc une droite d'équation ax+b qui passe par ces deux points (par les polynomes d'interpolation de Lagrange pour l'anecdote), tu résouta*0 + b max; d'ou b maxa*200 + b 100 d'ou a (100-b)/200 = (100-max)/200
0
Angoria
Messages postés
8
Date d'inscription
vendredi 28 avril 2006
Statut
Membre
Dernière intervention
21 novembre 2006

26 oct. 2006 à 21:19
Ok, merci beaucoup pour cette formule !! 
[javascript:Insert_Emoticon('/imgs2/smile_big.gif');

]




J'ai amélioré le code et rajouté des fonctions qui permettent lorsque la valeur de la taille du carré devient négative l'effet soit inversé, ça donne ça :



onClipEvent (mouseMove) {
 xpos = _x;
 ypos = _y;
 xmouse = _root._xmouse;
 ymouse = _root._ymouse;
 xdist = xmouse-xpos;
 ydist = ymouse-ypos;
 if (xdist<100 and xdist>-100 and ydist<100 and ydist>-100 ) {
  var max = 2;
_xscale = max*100-xdist*(100-max)/100;
_yscale = max*100-ydist*(100-max)/100 ;
 } else {
  _xscale = 100;
  _yscale = 100;
}
 if (xdist<=-0) {
       var max = 2;
_xscale = max*100-xdist*(1-max);
}
if (ydist<=-0) {
       var max = 2;
_yscale = max*100-ydist*(1-max);
}
if(xdist<-100){
    _xscale = 100;
}
if(ydist<-100 or ydist>100){
    _yscale = 100;
}
}

Par contre, j'ai un peu de mal à épurer tout ça...(si c'est épurable !)
Et il y a aussi un autre problème ; lorsque l'on bouge la souris sur l'axe X par exemple, le carré va donc varier sa taille selon _xmouse mais l'effet ne s'atténue pas lorsque _ymouse varie ; en faisant le test avec plusieurs carrés disposés sur la scène, la ligne entière d'un même X grossit (il y a évidament le même problème pour Y).
0
Angoria
Messages postés
8
Date d'inscription
vendredi 28 avril 2006
Statut
Membre
Dernière intervention
21 novembre 2006

26 oct. 2006 à 21:23
Oups, j'ai collé un AC d'une version précédente. J'ai oublié de rajouter ma correction sur les lignes :

_xscale = max*100-xdist*(100-max)/100;
_yscale = max*100-ydist*(100-max)/100 ;

remplacé par:

_xscale = (max*100-xdist*(100-max)/100)-ydist;
_yscale = (max*100-ydist*(100-max)-xdist/100)-xdist ;
0