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

cs_flow38 Messages postés 23 Date d'inscription samedi 17 avril 2004 Statut Membre Dernière intervention 14 janvier 2005 - 11 janv. 2005 à 17:03
cs_flow38 Messages postés 23 Date d'inscription samedi 17 avril 2004 Statut Membre Dernière intervention 14 janvier 2005 - 14 janv. 2005 à 12:49
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

SuperDevy Messages postés 842 Date d'inscription dimanche 24 novembre 2002 Statut Membre Dernière intervention 2 juillet 2007
11 janv. 2005 à 17:52
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 !
0
cs_flow38 Messages postés 23 Date d'inscription samedi 17 avril 2004 Statut Membre Dernière intervention 14 janvier 2005
12 janv. 2005 à 15:30
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 ++
0
cs_flow38 Messages postés 23 Date d'inscription samedi 17 avril 2004 Statut Membre Dernière intervention 14 janvier 2005
12 janv. 2005 à 17:44
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....
0
cs_flow38 Messages postés 23 Date d'inscription samedi 17 avril 2004 Statut Membre Dernière intervention 14 janvier 2005
12 janv. 2005 à 23:05
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!?
0

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

Posez votre question
cs_flow38 Messages postés 23 Date d'inscription samedi 17 avril 2004 Statut Membre Dernière intervention 14 janvier 2005
12 janv. 2005 à 23:35
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();
0
cs_flow38 Messages postés 23 Date d'inscription samedi 17 avril 2004 Statut Membre Dernière intervention 14 janvier 2005
13 janv. 2005 à 15:35
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();
0
SuperDevy Messages postés 842 Date d'inscription dimanche 24 novembre 2002 Statut Membre Dernière intervention 2 juillet 2007
13 janv. 2005 à 17:54
cible.onRelease = cible.onReleaseOutside = function()
{
this.onEnterFrame = undefined;
}

A toi de parfaire !
www.SuperDevy.c.la !
0
cs_flow38 Messages postés 23 Date d'inscription samedi 17 avril 2004 Statut Membre Dernière intervention 14 janvier 2005
13 janv. 2005 à 19:34
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;
++
0
cs_flow38 Messages postés 23 Date d'inscription samedi 17 avril 2004 Statut Membre Dernière intervention 14 janvier 2005
14 janv. 2005 à 12:49
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();
0
Rejoignez-nous