Problème deplacement vitesse

Résolu
cs_sepult Messages postés 23 Date d'inscription dimanche 29 décembre 2002 Statut Membre Dernière intervention 24 septembre 2012 - 12 mars 2011 à 13:58
BBFUNK01 Messages postés 1310 Date d'inscription jeudi 16 juillet 2009 Statut Membre Dernière intervention 20 juin 2014 - 16 mars 2011 à 06:31
Bonjour tous, j'ai un petit problème avec mon code as, en effet je déplace un clip qui va allez jusqu'à un autre clip par rapport à sa position x et y.
Le problème est qu'il ralenti de trop.

Si j'augmente la vitesse il va allez trop vite jusqu'à l'autre clip, or il faut qu'il reste à la même vitesse jusqu'à l'arriver du clip.
Voila mon code :
this._parent.clip_depart.onEnterFrame=function () {
vitesse = 50;
this._x+=(this._parent.clip_arriver._x-this._x) / vitesse;
this._y+=(this._parent.clip_arriver._y-this._y) / vitesse;
}
Merci de votre aide et bon week

10 réponses

BBFUNK01 Messages postés 1310 Date d'inscription jeudi 16 juillet 2009 Statut Membre Dernière intervention 20 juin 2014 6
12 mars 2011 à 14:39
Hello,

c'est normal que ton clip ralentisse au fur et à mesure de son déplacement car tu définis un coefficient de vitesse, et tout au long de ton enterFrame tu définis la distance à parcourir pour ton clip par rapport à la position du clip à atteindre que tu soustrais à la position en cours du clip en mouvement, et tu divises le tout par ton coefficient vitesse. Donc pour bien faire il faut que tu indiques une valeur fixe de déplacement qui sera exécutée à chaque frame, par exemple :
var PointA:Number = clipQuiBouge._x;
var PointB:number = clipAatteindre._x;
var Distance:Number = PointB - PointA;
var Deplacement:Number = Distance/10; //Ici tu joues sur 10 pour trouver la vitesse qui te va

this.onEnterFrame = function(){
clipQuiBouge._x += Deplacement;
if(clipQuiBouge._x >= clipAatteindre._x){
delete this.onEnterFrame();
clipQuiBouge._x = clipAatteindre._x;
}
}


A plus ,

BBFUNK01

//C'est en forgeant qu'on devient forgeron... ;-) ;

musichrono
3
BBFUNK01 Messages postés 1310 Date d'inscription jeudi 16 juillet 2009 Statut Membre Dernière intervention 20 juin 2014 6
13 mars 2011 à 09:49
Hello,

en fait un onEnterFrame est exécuté à chaque image-clé, en l'occurrence comme tu as définis le framerate de ton animation à 24 images par seconde ça signifie que ton onEnterFrame sera exécuté 24 fois en une seconde. Donc plus tu augmentes le coefficient "vitesse", plus le déplacement sur chaque image-clé sera court et par conséquent le temps pour parcourir la distance sera plus long. A l'inversement plus tu réduit le coefficient "vitesse", plus ton clip fera son parcours rapidement.

A plus ,

BBFUNK01

//C'est en forgeant qu'on devient forgeron... ;-) ;

musichrono
3
cs_sepult Messages postés 23 Date d'inscription dimanche 29 décembre 2002 Statut Membre Dernière intervention 24 septembre 2012
12 mars 2011 à 15:02
Super merci de ton aide BBFUNK01, je vais voir tous cela, merci encore
0
cs_sepult Messages postés 23 Date d'inscription dimanche 29 décembre 2002 Statut Membre Dernière intervention 24 septembre 2012
12 mars 2011 à 15:16
J'ai un petit problème, flash me signal à chaque fois cette erreur :

256 niveau(x) de récursion ont été dépassés dans une liste d'actions.
Il s'agit probablement d'une boucle infinie.
L'exécution d'actions a été désactivée dans cette animation.

J'ai bien entendu mis var PointB:number en var PointB:Number vu qu'il manquer le N

MAis sinon je voie pas tout cela peut venir, je continu mes recherches.
Merci pour l'aide
0

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

Posez votre question
cs_sepult Messages postés 23 Date d'inscription dimanche 29 décembre 2002 Statut Membre Dernière intervention 24 septembre 2012
12 mars 2011 à 15:46
Bon ok je pense avoir résolu le prob, par contre comment je fait avec le y car la mon clip va que de x a x, merci !!!
0
cs_sepult Messages postés 23 Date d'inscription dimanche 29 décembre 2002 Statut Membre Dernière intervention 24 septembre 2012
12 mars 2011 à 18:50
Ok la encore, résolu à force de faire des tests, bref tout est ok, merci encore BBFUNK01

Sujet résolu....
0
cs_sepult Messages postés 23 Date d'inscription dimanche 29 décembre 2002 Statut Membre Dernière intervention 24 septembre 2012
12 mars 2011 à 22:50
Re moi, y a un truc que je n'arrive pas à comprendre.
Ma scène est à 24 image seconde.

J'ai mis une vitesse de 400

var Deplacement:Number = Distance/400;

Plus j'augmente le chiffre plus la vitesse est réduite, donc la parfait.

Le problème est qu'il y a un énorme décalage entre le clip qui ce déplace et le clip de qui ne bouge, donc du coup parfois le clip qui ce déplace ne rejoint jamais le clip d'arriver.

Par contre si je diminue la vitesse, par exemple 10 ou 100, la pas de problème.

C'est du à quoi à votre avis ?

Merci de votre aide !
0
cs_sepult Messages postés 23 Date d'inscription dimanche 29 décembre 2002 Statut Membre Dernière intervention 24 septembre 2012
13 mars 2011 à 11:33
Bonjour BBFUNK01 et merci pour les explications, je comprend mieux du coup, mais le problème est que je voudrait garder une vitesse lente tout en gardent le framerate en 24 image seconde.
Mais pour le coup si mon clip est assez loin de mon clip de destination, le clip qui va le rejoindre n'arrive pas à l'autre clip, il passe à coter carrément (décalage).
Tout cela va dépendre des distance qu'il y a entre le clip de départ et le clip d'arrivee.
Or quand je fait directement :

this._x+=(this._parent.clip_arriver._x-this._x) / vitesse;

La j'ai jamais ce problème.
A savoir aussi, quand mes deux clips sont assez près, la vitesse est carrement encore plus lente que la vitesse défini.

Alors je me demande s'il faudrait pas que je reste avec mon code de départ, mais faudrait que j'arrive a lui dire de ne pas ralentir autant a l'arrivee.
Merci en tout cas encore une fois de ton aide et de tes explications
0
cs_sepult Messages postés 23 Date d'inscription dimanche 29 décembre 2002 Statut Membre Dernière intervention 24 septembre 2012
13 mars 2011 à 11:35
Oups j'ai oublier de mettre le code complet :

var PointA:Number = clipQuiBouge._x;
var PointB:Number = clipAatteindre._x;
var PointC:Number = clipQuiBouge._y;
var PointD:Number = clipAatteindre._y;
var Distance:Number = PointB - PointA;
var DistanceDeux:Number = PointD - PointC;
var Deplacement:Number = Distance/400;
var DeplacementDeux:Number = DistanceDeux/400;

this.onEnterFrame = function(){
clipQuiBouge._x += Deplacement;
clipQuiBouge._y += DeplacementDeux;

if(clipQuiBouge.hitTest(clipAatteindre)){
delete this.onEnterFrame();
clipQuiBouge._x = clipAatteindre._x;
clipQuiBouge._y = clipAatteindre._y;
}
}
0
BBFUNK01 Messages postés 1310 Date d'inscription jeudi 16 juillet 2009 Statut Membre Dernière intervention 20 juin 2014 6
16 mars 2011 à 06:31
Hello,

tu peux tout simplement procéder ainsi :
this.onEnterFrame = function(){
clipQuiBouge._x += 1;
if(clipQuiBouge._x == clipAatteindre._x){
delete this.onEnterFrame();
}
}


Et tu joues sur la valeur de déplacement du clip ( +=1 ) pour trouver celle qui te convient, ainsi ton déplacement sera constant dans la vitesse.

A plus ,

BBFUNK01

//C'est en forgeant qu'on devient forgeron... ;-) ;

musichrono
0
Rejoignez-nous