Lier une animation au mouvement de la souris [Résolu]

Signaler
Messages postés
28
Date d'inscription
jeudi 22 décembre 2005
Statut
Membre
Dernière intervention
29 mars 2009
-
Messages postés
13
Date d'inscription
mercredi 19 mars 2008
Statut
Membre
Dernière intervention
20 février 2010
-
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

Messages postés
194
Date d'inscription
jeudi 1 janvier 2004
Statut
Membre
Dernière intervention
16 juillet 2007
1
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.
Messages postés
194
Date d'inscription
jeudi 1 janvier 2004
Statut
Membre
Dernière intervention
16 juillet 2007
1
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
Messages postés
1255
Date d'inscription
dimanche 18 décembre 2005
Statut
Membre
Dernière intervention
2 décembre 2008

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
Messages postés
194
Date d'inscription
jeudi 1 janvier 2004
Statut
Membre
Dernière intervention
16 juillet 2007
1
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
Messages postés
28
Date d'inscription
jeudi 22 décembre 2005
Statut
Membre
Dernière intervention
29 mars 2009

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.
Messages postés
28
Date d'inscription
jeudi 22 décembre 2005
Statut
Membre
Dernière intervention
29 mars 2009

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 !
Messages postés
28
Date d'inscription
jeudi 22 décembre 2005
Statut
Membre
Dernière intervention
29 mars 2009

GENIAL!

Oui, je veux bien que tu me proposes ces deux choses si tu as le temps.
Messages postés
28
Date d'inscription
jeudi 22 décembre 2005
Statut
Membre
Dernière intervention
29 mars 2009

un grand merci, passe une bonne soirée.
Messages postés
1
Date d'inscription
jeudi 10 juin 2004
Statut
Membre
Dernière intervention
22 novembre 2007

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
Messages postés
194
Date d'inscription
jeudi 1 janvier 2004
Statut
Membre
Dernière intervention
16 juillet 2007
1
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
Messages postés
13
Date d'inscription
mercredi 19 mars 2008
Statut
Membre
Dernière intervention
20 février 2010

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!
Messages postés
13
Date d'inscription
mercredi 19 mars 2008
Statut
Membre
Dernière intervention
20 février 2010

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:)