Problème deplacement vitesse

Résolu
Signaler
Messages postés
23
Date d'inscription
dimanche 29 décembre 2002
Statut
Membre
Dernière intervention
24 septembre 2012
-
Messages postés
1310
Date d'inscription
jeudi 16 juillet 2009
Statut
Membre
Dernière intervention
20 juin 2014
-
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

Messages postés
1310
Date d'inscription
jeudi 16 juillet 2009
Statut
Membre
Dernière intervention
20 juin 2014
6
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
Messages postés
1310
Date d'inscription
jeudi 16 juillet 2009
Statut
Membre
Dernière intervention
20 juin 2014
6
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
Messages postés
23
Date d'inscription
dimanche 29 décembre 2002
Statut
Membre
Dernière intervention
24 septembre 2012

Super merci de ton aide BBFUNK01, je vais voir tous cela, merci encore
Messages postés
23
Date d'inscription
dimanche 29 décembre 2002
Statut
Membre
Dernière intervention
24 septembre 2012

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
Messages postés
23
Date d'inscription
dimanche 29 décembre 2002
Statut
Membre
Dernière intervention
24 septembre 2012

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 !!!
Messages postés
23
Date d'inscription
dimanche 29 décembre 2002
Statut
Membre
Dernière intervention
24 septembre 2012

Ok la encore, résolu à force de faire des tests, bref tout est ok, merci encore BBFUNK01

Sujet résolu....
Messages postés
23
Date d'inscription
dimanche 29 décembre 2002
Statut
Membre
Dernière intervention
24 septembre 2012

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 !
Messages postés
23
Date d'inscription
dimanche 29 décembre 2002
Statut
Membre
Dernière intervention
24 septembre 2012

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
Messages postés
23
Date d'inscription
dimanche 29 décembre 2002
Statut
Membre
Dernière intervention
24 septembre 2012

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;
}
}
Messages postés
1310
Date d'inscription
jeudi 16 juillet 2009
Statut
Membre
Dernière intervention
20 juin 2014
6
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