Lier une animation au mouvement de la souris

Résolu
fornatus Messages postés 28 Date d'inscription jeudi 22 décembre 2005 Statut Membre Dernière intervention 29 mars 2009 - 22 déc. 2005 à 01:09
cha9chi Messages postés 13 Date d'inscription mercredi 19 mars 2008 Statut Membre Dernière intervention 20 février 2010 - 28 août 2008 à 15:57
Bonjour, je suis un pauvre petit graphiste qui c'est fait laché au dernier moment et j'ai cruellement besoin d 'aide pour réussir mon animation.

Il s'agit ici de déplacer sur un axe horizontale un clip grâce à la souris (la postion x de la souris étant aussi la position x du clip) là où ça se complique c'est quand il s'agit de faire coincider ce mouvement avec la lecture du clip.

Autrement dit lorsque je déplace ma souris de gauche à droite j'aimerais que l'animation se lise du début à la fin (si je vais jusqu'au bord droit de mon anim) et inversement ci je vais de droite à gauche. Si ma souris s'arrête au milieu de l'écran, le clip doit être positionnée au milieur ET montrer l'image situé en son milieu.

Pouvez vous m'aider ?

Pour toutes autres questions je reste à votre disposition.

Si vous pouviez travailler à partir du fichier situé à cette adresse je ne vous en serez que trop reconnaissant : http://ahura.free.fr/burn.zip. J'ai ajouté des explications dans le clip.

12 réponses

atchoumdu51 Messages postés 194 Date d'inscription jeudi 1 janvier 2004 Statut Membre Dernière intervention 16 juillet 2007 1
22 déc. 2005 à 18:48
Désolé de mon retard je n'étais pas la de la journée.

Alors tout dépend de si tu veux que toute l'animation fasse réagir le clip il suffit de mettre le code suivant:

onClipEvent(load)
{
this.stop();
}
onClipEvent(enterFrame)
{
if(this._parent._xmouse < 0)
{
this._x = 0;
}
else if(this._parent._xmouse > 550 - this._width)
{
this._x = 550 - this._width;
}
else
{
this._x = this._parent._xmouse;
}
this.gotoAndStop(int(this._x));
}

Commentaires:
1-arreter l'animation des son chargement pour éviter qu'elle ne défile seule
2-tester si la souris est a gauche du zéro é le cas échéant positionner le clip a 0
3-tester si le clip est a droite (largeur comprise) et le cas échéant le placer au maximum a droite
4-sinon le placer au niveau de la souris
5-enfin aller a la frame de son _x

j'espere etre assez clair.

ceci est pour le cas ou la souris agit sur le clip dans toute l'animation mais tu veux peut etre qu'elle agsisse simplement en survolant le clip?

Ensuite deux choses peuvent t'intéresser, avoir un mouvement plus "souple" et ce centrer autour de la souris. Je peux te les proposer a moins que tu ne veuilles les rechercher.
3
atchoumdu51 Messages postés 194 Date d'inscription jeudi 1 janvier 2004 Statut Membre Dernière intervention 16 juillet 2007 1
22 déc. 2005 à 21:20
Voila j'ai fait le code...je ne peut te l'expliquer que rapidement. Le principe est de mesurer la distance entre le clip et l'arrivée et de déplacer le clip de cette distance multipliée par un coefficient inférieur a 1 et supérieur a 0 (que tu peux modifier dans le code, cela modifira le temps de réponse). Sinon cela reste dans la continuité des codes précédents.
Je retire this._width/2 au début pour centrer le code.

onClipEvent(load)
{
this.coef = new Number(0.1);
this.stop();
}
onClipEvent(enterFrame)
{
this.pos = this._x + (this._parent._xmouse - this._width/2 - this._x)*this.coef;
if(this.pos < 0)
{
this._x = 0;
}
else if(this.pos > 550 - this._width)
{
this._x = 550 - this._width;
}
else
{
this._x = this.pos;
}
this.gotoAndStop(int(this._x));
}

Je suis désolé du temps de réponse mais j'ai un pc qui a grillé une barrette de RAM ca m'a pris du temps.

Bonne prog
3
cortoh Messages postés 1255 Date d'inscription dimanche 18 décembre 2005 Statut Membre Dernière intervention 2 décembre 2008
22 déc. 2005 à 02:01
bon, je ne suis pas certain d'avoir bien
compris ton souci, car tu parles d'animation, mais dans ton flash, il
n'y pas d'animation....juste la bande noire et le rectangle rouge...

bon si je pars du principe qu'au final, ta bande noire sera cette dite
animation, tu veux deplacer un clip( ici ton rectanlge rouge suivant
les mouvements de la souris:

Rec._x = _xpos //Rec est le nom de ton l'instance de ton clip rectangle

ce qui obligera ton rectangle a suivre les mouvements de la souris suivant l'axe des X.

si tu veux eviter que ce rectangle ne se ballade verticalement, fixes la valeur de _y:

Rec._y = A ou A est un nombre que tu definiras toi meme



ensuite, est-ce que ton animation sur laquelle tu veux interagir sera dans le bandeau, avcec un deplacement suivant l'axe des X?



dis moi si ce qu'il y a sur:

http://zewebstory.ifrance.com est ce que tu cherches a faire ou pas?








Peace from Mars
to all human beings
0
atchoumdu51 Messages postés 194 Date d'inscription jeudi 1 janvier 2004 Statut Membre Dernière intervention 16 juillet 2007 1
22 déc. 2005 à 02:14
Bonjour, voivi un code que j'applique a un movieClip possédant autant de frames que de positions de x.

onClipEvent(load)
{
this.stop;
}
on(press)
{
this.onEnterFrame = function()
{
this._x = this._parent._xmouse;
this.gotoAndStop(int(this._x));
}
}
on(release)
{
delete(this.onEnterFrame);
}
on(releaseOutside)
{
delete(this.onEnterFrame);
}

Par contre par rapport a ton projet il faudrais que le clip ne se déplace pas dans lui même mais qu'il reste toujours avec le coin supérieur gauche aux coordonnées (0,0)

Vooila le commentaire du code

1- on arrete le clip a son chargement avec OnclipEVent(load)
2-quand on clique sur le clip il commence a se déplacer avec onEnterFrame, attention au int pour avoir des valeurs entieres
3-on supprime avec delete quand l'utilisateur relache sur ou en dehors du clip
tu peux limiter les mouvements du clip avec des if(this._x > 550){this._x 550;} et if(this._x < 0){this._x 0;}dans le onEnterFrame apres le code deja mis

j'espere que c'étais ce que tu recherchais
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
fornatus Messages postés 28 Date d'inscription jeudi 22 décembre 2005 Statut Membre Dernière intervention 29 mars 2009
22 déc. 2005 à 02:44
merci pour ce début d'explication. En fait j'aimerais qu'il n'y ai pas besoin de cliquer sur le clip mais juste qu'on est besoin de survoler l'animation pour bouger le clip. Comment dois-je faire pour donner ce même effet de droite à gauche ? Ce code ne semble marcher que pour lire la scène du début à la fin.
Ou dois-je placer exactement placer if(this._x > 550){this._x 550;} et if(this._x < 0){this._x 0;} ?

Je m'excuse pour toutes ces questions et vous remercie déjà pour l'aide.
0
fornatus Messages postés 28 Date d'inscription jeudi 22 décembre 2005 Statut Membre Dernière intervention 29 mars 2009
22 déc. 2005 à 02:49
Désolé atchoumdu51 c'est moi, ça marche du tonnerre! Il faudrait juste qu'on est besoin de ne pas appuyer sur le clip mais juste de passer la souris sur l'animation.

Si tu à le temps de m'expliquer ou comment marche la fonction if n'hésite pas. Merci beaucoup à vous deux !
0
fornatus Messages postés 28 Date d'inscription jeudi 22 décembre 2005 Statut Membre Dernière intervention 29 mars 2009
22 déc. 2005 à 18:55
GENIAL!

Oui, je veux bien que tu me proposes ces deux choses si tu as le temps.
0
fornatus Messages postés 28 Date d'inscription jeudi 22 décembre 2005 Statut Membre Dernière intervention 29 mars 2009
22 déc. 2005 à 21:23
un grand merci, passe une bonne soirée.
0
cs_nikolu Messages postés 1 Date d'inscription jeudi 10 juin 2004 Statut Membre Dernière intervention 22 novembre 2007
22 nov. 2007 à 17:57
bonjour moi j'ai un petit souci
j'aimerai le meme principe mais sans le deplacement du clip
c 'est a dire lire un clip en deplacant la souris
si la souris va a droite le clip joue si je vais a gauche le clip revien au debut mais en loop sans s'arreter
alors si quelqu'una une soluce a mon pb merci
0
atchoumdu51 Messages postés 194 Date d'inscription jeudi 1 janvier 2004 Statut Membre Dernière intervention 16 juillet 2007 1
22 nov. 2007 à 18:13
Bonjour

Tu peux essayer de te servir de monclip.goToAndStop en fonction de ce que tu veux faire (je suis pas sur de la casse car j'utilise jamais), en faisant des tests pour que ca boucle. Tu notes la frame actuelle et le nombre de frames dans des variables, et si dans tes calculs tu dépasses la valeur max tu reviens a 0, de même dans l'autre sens.

Mathieu
0
cha9chi Messages postés 13 Date d'inscription mercredi 19 mars 2008 Statut Membre Dernière intervention 20 février 2010
28 août 2008 à 15:21
salt a tous je voudrai fait une annimation comme celle de www.109.com.tn je ne suis arriver :'( !!s'il vous plai aider moi :)merci!
0
cha9chi Messages postés 13 Date d'inscription mercredi 19 mars 2008 Statut Membre Dernière intervention 20 février 2010
28 août 2008 à 15:57
salut a tous a par se probleme la j'en ai un autre :'(!!je n'arriver pas a appliquer se scripte a un objet que j'ai crée sans script!!!est ils possible???
le script :

MovieClip.prototype.DrawCircle=function(x,y,r){
    this.moveTo(x+r,y);
    this.beginFill("0xFBFFA4",100);
    for(var t=0;t<Math.PI*2;t+=.5){
        this.lineTo(x+r*Math.cos(t),y+r*Math.sin(t));
        }
    this.endFill();
    }
FindAngle = function (x1, x2, y1, y2) {
    return Math.atan2(y2-y1, x2-x1);
    };
Distance=function(x1,x2,y1,y2){
    return Math.sqrt(Math.pow(x2-x1,2)+Math.pow(y2-y1,2));
}
Interpolate=function(x1,y1,x2,y2,n){
    var dist= Distance(x1,x2,y1,y2);
    var ang = FindAngle(x1,x2,y1,y2);
    var points = [];
    for(var l = 0;l<=dist;l+=dist/n){
        var x =x1+l*Math.cos(ang);
        var y = y1+l*Math.sin(ang);
        points.push({x:x,y:y});
        }
    return points;
    }
DrawNodes=function(array){
    _root.createEmptyMovieClip("line",1).lineStyle(1,0xFFFFFF,40);
    line.moveTo(array[0].x,array[0].y);
    for(var i = 1; i<array.length-1;i++){
        line.lineTo(array[i].x,array[i].y);
    }
    line.DrawCircle(array[array.length-2].x,array[array.length-2].y,5);
}
currentnodes=gotonodes=Interpolate(275,0,_xmouse,_ymouse,15);
onMouseMove=function(){
    gotonodes=Interpolate(275,0,_xmouse,_ymouse,15);
    }
onEnterFrame=function(){
    for(var node in gotonodes){
        currentnodes[node].x=currentnodes[node].x+(gotonodes[node].x-currentnodes[node].x)/(node*node/30+1);
        currentnodes[node].y=currentnodes[node].y+(gotonodes[node].y-currentnodes[node].y)/(node*node/30+1);
        }
    DrawNodes(currentnodes);
    }

tout simplement je veut changer la cercle par un objet!!merci:)
0
Rejoignez-nous