:::::: mxPrototypes ::::::

Retour à l'accueil (site en flash) :::: Retour à l'accueil (site en html ) :::: ajouter aux favoris

fonction slowdownTo() pour se rapprocher d'un point de moins en moins vite

Une des nombreuses manières de se rapprocher de moins en moins vite d'un point, est de se rapprocher à chaque fois d'une fraction de la distance qui nous sépare de ce point.

Mathématiquement, nous n'atteignons jamais le point, par exemple, si vous remplissez un verre d'eau de la moitié du volume libre restant, eh bien vous ne le remplirez jamais, puisqu'il restera à chaque fois l'autre moitié de vide !!
Cependant, comme on s'en rapproche de très près (d'infiniment près), il suffit de faire un petit arrondi et au bout de quelque temps on atteint notre objectif.

Il est même possible de calculer combien de fois il faut effectuer l'opération pour être à une distance maximale a (marge d'erreur) de l'objectif:
il faut résoudre: (1-fraction)n < a
donc, par passage aux logarithmes:
n > ln(a)/ln(1-fraction)
Par exemple, si vous vous déplacez continuement d'un dixième de la distance qui vous sépare de l'objectif, il faudra repeter environ 20 fois l'opération pour couvrir 90% de la distance (et 23 autre pour faire les 9% suivants !).

Cette petite formule pourra vous être utile si vous voulez savoir en combien d'images le movieclip arrivera à destination.

Regardez l'exemple ici, le clip est programmé pour suivre la souris.

Le code, commenté:
(note: la fonction doit tourner en boucle)
movieClip.prototype.slowdownTo = function(x,y,ralenti){
	this._x += (x-this._x)*ralenti; /* on se déplace d'un fraction de la distance restante en x */
	this._y += (y-this._y)*ralenti; /* on se déplace d'un fraction de la distance restante en y */
}

/* pour 'ralenti', choisissez une valeur entre 0 et 1, par exemple 0.5 */
.

.Commentaires:

tang:
nice
rush:
c'est vachement connu ça
:

adrien:
ouai mais la base de tout ;)
siper:
et pr faire tourner en boucle afin que le mc suit la souris
:

damien:
oui ce code doit tourner en boucle, donc il faut le mettre dans un onEnterFrame !
ton1K:
vous pouvez m'aidez j'ai absoliment besoin de ce tutorial mais je comprend pas ce que je dois modifier et comment l'inserer je debute c'est pas possible de faire qqch de telechargeable?
ton1K:
ca fonctionne au moin avec mx?
damien:
Pourtant pas compliqué ce coup-ci ;) il faut juste recopier le code dans flash, tel quel ! Il y a meme un exemple.
matthieu:
où faut-il mettre la source, sur le _root?la boucle?
damien:
les trois lignes sont à coller dans flash n'importe où sur la première image par exemple.La boucle, n'importe où, ça dépend de ce qu'on en fait !! par exemple _root.onENterFrame=function(){clip.slowdownTo(0,0,0.5); }
Bess:
Lorsque je mets ce code en oeuvre dans mon this.onEnterFrame = function(). J'occupe 100% de l'UC. pourtant je termine par un delete this.enterFrame; . Avez-vous une solution pour pallier au problème ?
mike:
>Bess
mike:
>Bess, c'est delete.this.onEnterFrame (tu as oublié le 'on'
okids:
sujet: le site en généraldommage que les ewemples passent pas sous mozilla firefox... oubliez un peu ie et microsoft lol
moiche:
coller tel kel sa mache po
gh:
salut si on met ralenti a 1.5 on aurra un movement elastiqte!!!!!
BooBoo:
Maintenant avec flash8 il y a une class pour ca...Tween....derivé des algorythme de robert penner...
marc:
tes code sont bien mais tous tes tuto sont mal expliqué bon courage pour les debutants