Question sur angle de sourie, rotation de clip....

Signaler
Messages postés
23
Date d'inscription
samedi 17 avril 2004
Statut
Membre
Dernière intervention
14 janvier 2005
-
Messages postés
23
Date d'inscription
samedi 17 avril 2004
Statut
Membre
Dernière intervention
14 janvier 2005
-
Salut alors, voila pour un site j'ai fait une interface ou face a un coffre fort l'internaute devra faire tourner les bagues afin d'obtenir le bon code permettant le coffre en question. Pour l'instant j'en suis simplement à l'etape faire tourner les bague avec la sourie:

sur la premiere frame de mon animation:
//une fonction qui aligne l'angle de mon clip (nommé cible) sur celui de ma sourie

rotation = function (x,y) {
x= _xmouse-cible._x;
y= _ymouse-cible._y;
D = Math.sqrt((x*x)+(y*y));
AngleRad = Math.acos(x/D);
_root.cible._rotation = 180 * AngleRad / Math.PI * y/Math.abs(y);
}//pas de probleme ça marche


//et la je voulais faire en sorte que lorsqu'on clic sur le clip cible ça lance la fonction rotation en boucle, d'ou l'utilisation du _root.onEnterFrame sauf ça ne marche qu'une fois et puis plus rien

_root.cible.onPress = function () {
_root.onEnterFrame = rotation(_root.cible._x,_root.cible._y)
}

Donc voila je voudrais savoir comment faire pour que: on press, la fonction rotation s'execute en boucle tant que le ne lache pas le bouton

voila d'autre probleme vont survenir mais deja ça , ça m'aiderai bien!
@++

9 réponses

Messages postés
842
Date d'inscription
dimanche 24 novembre 2002
Statut
Membre
Dernière intervention
2 juillet 2007

Petite amélioration et optimisation de ta fonction rotation :



function rotation ()


{


cible._rotation = Math.atan2(cible._ymouse,cible._xmouse)*180/Math.PI;


}






Pour faire débuter l'action en cas de clique sur le bouton :



cible.onMouseMove = undefined;

cible.onPress = function ()

{

this.onMouseMove = rotation;

}












A toi de parfaire !
www.SuperDevy.c.la !
Messages postés
23
Date d'inscription
samedi 17 avril 2004
Statut
Membre
Dernière intervention
14 janvier 2005

Salut SuperDevy, merci pour ton aide mais j'aurais encore 2 questions:
_ Dans le code suivant :

cible.onMouseMove = undefined;
cible.onPress = function ()
{
this.onMouseMove = rotation}
A quoi sert la ligne cible.onMouseMove = undefined; ?

_ L'effet obtenu n'est pas en faite celui attendu, car la function "aligne" l'angle de cible sur celui de la sourie. Or il faudrait en fait que la function modifie l'angle du clip mais en fonction des variation d'angle de la sourie....ce qui est donc plus complexe....cette nouvelle difficulté me ramènne à une question qui m'intrigue depuis longtemps :

comment fait on en action script pour comparer les valeurs d'une variable qui évolue dans le temps (dans mon cas de coffre fort, il faudrait recuperer l'angle de la sourie à l'instant t et a l'instant t+1 pour obtenir la variation d'angle et la reporter sur l'angle de cible....je ne dit pas trop de betise!? :) )
Enfin en faite j'ai conscience que ça doit etre assez compliqué a expliquer mais si tu pouvez simplement m'indiquer un tuto, un fla ou un lien abordant ce genre de problématique ce serai deja trés cool...

voila ++
Messages postés
23
Date d'inscription
samedi 17 avril 2004
Statut
Membre
Dernière intervention
14 janvier 2005

Re, oui j'ai eu l'idée de tester avec la fonction setInterval , mon code est bien crade mais ça commence a faire comme decris plus haut.....: oui j'ai pa s encore integre ton optimisation de code et j'ai pas mal touche au mien j'ai un peu peur de tout faire foirée....

Angleinit = function (x,y) {

x= _xmouse-cible._x;
y= _ymouse-cible._y;
D = Math.sqrt((x*x)+(y*y));
AngleRad = Math.acos(x/D);
_root.cible.Angle0 = 180 * AngleRad / Math.PI * y/Math.abs(y);
}

ModifAngle = function () {

x= _xmouse-cible._x;
y= _ymouse-cible._y;
D = Math.sqrt((x*x)+(y*y));
AngleRad = Math.acos(x/D);
_root.cible.Angle2 = 180 * AngleRad / Math.PI * y/Math.abs(y);
_root.cible.modif = _root.cible.Angle0 -_root.cible.Angle2 ;
_root.cible._rotation = Math.round(_root.cible._rotation + _root.cible.modif) ;
}


cible.onMouseMove = undefined;
cible.onPress = function ()
{ setInterval(Angleinit,20);
setInterval(ModifAngle,30);



}

suis je sur la bonne voie ou y'a t il plus simple?
Reste le ^probleme que quand je relache le bouton de la sourie, la bague continue a "suivre" ma sourie....
Messages postés
23
Date d'inscription
samedi 17 avril 2004
Statut
Membre
Dernière intervention
14 janvier 2005

Bon alors j'ai potassé et j'ai decide dele faire plus dans les regles de l'art ...ça donne ça:
Dans la 1er image de mon anim(_root):
--------------------
cible.onMouseMove = undefined;
cible.onPress = function ()
{
this.cible.rotat() ;
}


cible.onRelease = function ()
{
this.onMouseMove = 0 ;
//oui alors la ç'est carrement au pif mais j'en suis pas encore a faire marcher cette etape!! mdr
}

stop();

Sur la 1er image de mon clip dont l'occurence est cible:(j'ai des doute sur les chemin pour el clip cible...? cible est sur la scene de l'anim)
-----------------------------------------------------------------------------
//Angle initial de la sourie
Angleinit = function ()
{
this.cible.Angle0 = Math.atan2(this.cible._ymouse,this.cible._xmouse)*180/Math.PI;


}





//Fonction calculant une variation d'angle de la sourie et modifiant en csq celle de cible
ModifAngle = function ()
{
this.cible.Angle2 = Math.atan2(this.cible._ymouse,this.cible._xmouse)*180/Math.PI;
this.cible.modif = -(this.cible.Angle0 -this.cible.Angle2)*1.5 ;
this.cible._rotation = Math.round(this.cible._rotation + this.cible.modif) ;
updateAfterEvent();
}


MovieClip.prototype.rotat = function(){
this.onEnterFrame = function(){
setInterval(Angleinit,47);
setInterval(ModifAngle,50);
updateAfterEvent();
}
}

Bon alors c'est beaucoup plus structuré mais ça amrche pas ...ou est le probleme!?
Messages postés
23
Date d'inscription
samedi 17 avril 2004
Statut
Membre
Dernière intervention
14 janvier 2005

Alors la ça marche mais pas moyen d'arreter le truc: le cible.onRelease ne marche pas et l'anim est un peu brusque...

//tout sur la premiere image de mon anim:

//Angle initial de la sourie
Angleinit = function ()
{
_root.cible.Angle0 = Math.atan2(_root.cible._ymouse,_root.cible._xmouse)*180/Math.PI;


}





//Fonction calculant une variation d'angle de la sourie et modifiant en csq celle de cible
ModifAngle = function ()
{
_root.cible.Angle2 = Math.atan2(_root.cible._ymouse,_root.cible._xmouse)*180/Math.PI;
_root.cible.modif = -(_root.cible.Angle0 - _root.cible.Angle2)*1.5 ;
_root.cible._rotation = Math.round(_root.cible._rotation + _root.cible.modif) ;
updateAfterEvent();
}


MovieClip.prototype.rotat = function(){
this.onEnterFrame = function(){
setInterval(Angleinit,47);
setInterval(ModifAngle,50);
updateAfterEvent();
}
}


cible.onMouseMove = undefined;
cible.onPress = function ()
{
this.rotat() ;
}


cible.onRelease = function ()
{
this.onMouseMove = 0 ;
//oui alors la ç'est carrement au pif mais j'en suis pas encore a faire marcher cette etape!! mdr
}

stop();
Messages postés
23
Date d'inscription
samedi 17 avril 2004
Statut
Membre
Dernière intervention
14 janvier 2005

Voici mon code retravaillé et commenté, l'effet obtenu est plutot bien mais comme avant l'effet ne s'arrete pas lorsqu'on relache le bouton de la sourie:


//Fonction de calcul de l'angle initial de la sourie
Angleinit = function (nomocc)
{
nomocc.Angle0 = Math.atan2(nomocc._ymouse,nomocc._xmouse)*180/Math.PI;
}



//Fonction calculant la variation d'angle de la sourie et modifiant en csq celle de cible
ModifAngle = function (nomocc)
{
nomocc.Angle2 = Math.atan2(nomocc._ymouse,nomocc._xmouse)*180/Math.PI;
nomocc.modif = -(nomocc.Angle0 - nomocc.Angle2)*1.5 ;
if(Math.abs(nomocc.modif)<1)_root.cible.modif=0;//permet d'eviter le "tremblement" de la cible
nomocc._rotation = Math.round(nomocc._rotation + nomocc.modif) ;
updateAfterEvent();
}

//Fonction permettant de modifier rotation de la cible de façon reguliere
MovieClip.prototype.rotat = function()
{
this.onEnterFrame = function()
{
modif = setInterval(ModifAngle,20,this);
updateAfterEvent();
}
}

cible.onMouseMove = undefined;


//cible est le clip a faire tourner...


cible.onPress = function ()
{
Angleinit(this);
this.rotat();
}


cible.onRelease = function()
{
delete this.onEnterFrame ;
}//c'est donc cette commande qui ne marche pas...?




stop();
Messages postés
842
Date d'inscription
dimanche 24 novembre 2002
Statut
Membre
Dernière intervention
2 juillet 2007

cible.onRelease = cible.onReleaseOutside = function()
{
this.onEnterFrame = undefined;
}

A toi de parfaire !
www.SuperDevy.c.la !
Messages postés
23
Date d'inscription
samedi 17 avril 2004
Statut
Membre
Dernière intervention
14 janvier 2005

Merci de l'aide, mais ça marche pas!! je vais peter un cable....sinon tu entend quoi par "parfaire" et a quoi sert la ligne:
cible.onMouseMove = undefined;
++
Messages postés
23
Date d'inscription
samedi 17 avril 2004
Statut
Membre
Dernière intervention
14 janvier 2005

ayez j'ai trouve, c'etait ma methode rotat qui bloqué, en la simplifiant tout marche nickel!!!!!!!!:

//Angle initial de la sourie
Angleinit = function (nomocc)
{
nomocc.Angle0 = Math.atan2(nomocc._ymouse,nomocc._xmouse)*180/Math.PI;
}



//Fonction calculant une variation d'angle de la sourie et modifiant en csq celle de cible
ModifAngle = function (nomocc)
{
nomocc.Angle2 = Math.atan2(nomocc._ymouse,nomocc._xmouse)*180/Math.PI;
nomocc.modif = -(nomocc.Angle0 - nomocc.Angle2)*1.5 ;
if(Math.abs(nomocc.modif)<1)_root.cible.modif=0;//permet d'eviter le tremblement de la bague
nomocc._rotation = Math.round(nomocc._rotation + nomocc.modif) ;
updateAfterEvent();
}

MovieClip.prototype.rotat = function()
{
this.onEnterFrame = function()
{ //simplifiaction avant : modif = setInterval(ModifAngle,20,this)
ModifAngle(this);
}
}

cible.onMouseMove = undefined;


cible.onPress = function ()
{
Angleinit(this);
this.rotat();
}


cible.onRelease cible.onReleaseOutside function()
{
this.onEnterFrame = undefined;


}
stop();