Stopper un carrousel sur un angle prédéfini

neuronezero Messages postés 2 Date d'inscription dimanche 30 septembre 2007 Statut Membre Dernière intervention 23 juin 2009 - 23 juin 2009 à 17:34
gremlins7 Messages postés 380 Date d'inscription mardi 29 avril 2003 Statut Membre Dernière intervention 28 décembre 2009 - 24 juin 2009 à 11:05
Alors voilà mon problème...
J'ai fais un carrousel tout simple en AS2, mais je désirerais faire en sorte que quand je clik sur l'un des objets le carrousel (qui est fixe au départ) se mette a tourner jusqu'à placer cet objet en 1ere position (puis lance un lien, mais cette partie marche)

J'ai essayé de déterminer une plage d'angle sur laquelle l'objet mettrai la vitesse de rotation a 0. Mais bon je galère...
(voir la fonction stoppeur() )

si une bonne âme a un éclair de génie, Merci d'avance.

var numOfItems:Number = 4;

var radiusX:Number = 70;

var radiusY:Number = 5;

var centerX:Number = 65

var centerY:Number = 20

var speed:Number = 0.02;

var perspective:Number =2;

for(var i=0;i<numOfItems;i++){

    var t = this.attachMovie("bottle"+i,"bottle"+i,i+1);

    t.angle = i * ((Math.PI*2)/numOfItems);

    t.onEnterFrame = CARROUSELmover;

}

function CARROUSELmover(){

    this._x = Math.cos(this.angle) * radiusX + centerX;

    this._y = Math.sin(this.angle) * radiusY + centerY;

    var s = (this._y-perspective) /(centerY+radiusY-perspective);
    this._xscale this._yscale s*100;

    this.angle += this._parent.speed;

    if (this.angle >= 2* Math.PI){

        this.angle -= 2* Math.PI;

    }

    this.swapDepths(Math.round(this._xscale) + 100);

    //trace(this._name + "   " +this.angle);

}

   

function stoppeur(cible, angleCible){

    _root.onEnterFrame = function(){

        if ((angleCible+0.05)<=cible.angle&&cible.angle<=(angleCible-0.05)){

            speed=0;

            delete this.onEnterFrame;

        }else{

            speed= 0.05;

        }

    }

}

caller = function(url_cible){

    getURL(url_cible);

}

delay = function(url_cible2){

    //setTimeout(caller,2500,url_cible2);

}

//bouteille bleu

bottle2.onRelease = function(){

    this._parent.stoppeur(bottle2, 2);

    delay("Default.aspx?u=agrumes");

    trace("violet");

}

4 réponses

gremlins7 Messages postés 380 Date d'inscription mardi 29 avril 2003 Statut Membre Dernière intervention 28 décembre 2009
23 juin 2009 à 19:15
Salut,
quel est le problème avec ta fonction stopper ? A premier coup d'oeil, ça à l'air correct...
je rajouterai juste un truc du style cible.angle=anglecible lorsque ta condition de plage(+/- 0.05) est vraie...
0
neuronezero Messages postés 2 Date d'inscription dimanche 30 septembre 2007 Statut Membre Dernière intervention 23 juin 2009
23 juin 2009 à 19:25
J'ai trouvé ce qui n'allait pas...
c'était tout simplement les <= et >= dans ma condition qui étaient mis n'importe comment ...
Voilà ce qui arrive quand on ne sort pas la tête 2 minutes de son code :)

Maintenant ça marche mais il me faut encore comprendre comment arriver à stopper sur une valeur nette plutôt que dans un espace trop large (mais j'ai peur qu'il puisse lui arriver de sauter cette valeur...). Peut -être juste des réglages afin de resserrer l'intervalle.

en tout cas merci d'avoir répondu aussi vite.
0
gremlins7 Messages postés 380 Date d'inscription mardi 29 avril 2003 Statut Membre Dernière intervention 28 décembre 2009
24 juin 2009 à 11:04
Re,
ben pour stopper essaye ce que je t'ai indiqué :
tu rajoutes cible.angle=anglecible si ta condition est vrai, c'est à dire que si tu est dans la plage d'ange +/-0.05 alors en plus de mettre speed à zero tu impose l'angle toi même avec cible.angle=anglecible. Ce qui se traduira par un petit saut de la cible qui ne devrait même pas être perceptible.
A+
0
gremlins7 Messages postés 380 Date d'inscription mardi 29 avril 2003 Statut Membre Dernière intervention 28 décembre 2009
24 juin 2009 à 11:05
ps: je voulais dire pour stopper sur une valeur nette bien entendu
0
Rejoignez-nous