FLash AS3 - Comment exprimer la différence entre les deux coords xy comme un nombre compris entre 0 et 1?

StackOverflow https://stackoverflow.com/questions/4123074

Question

Je l'ai créé une classe MovieClip et animateur classe géniteur qui Animer MovieClips le long d'un ensemble de points X, y. Je l'ai utilisé TweenMax de GreenSock pour accomplir l'animation et j'ai mis la vitesse à 1 seconde entre chaque point. Le problème est que lorsque la distance entre deux points est faible, il semble trop lent.

Ce que je voudrais faire est de calculer en quelque sorte la distance entre les deux points et la sortie d'une vitesse dans la plage de 0 à 1 seconde de sorte que la vitesse doit être correcte pour les distances plus courtes, ainsi que les distances plus longues.

Toute aide ou des conseils serait grandement apprécié.

Thankyou,

eb_dev

Était-ce utile?

La solution

Je seconde ce que Matti a dit, mais il peut être fait plus rapidement - pour un coût d'environ 48 à 64 bits de mémoire (whoah tellement !!! ...)

var dX:Number = x1 - x2;
var dY:Number = y1 - y2;
var dist:Number = Math.sqrt(dX * dX + dY * dY);
var animTime = dist / state.stageWidth;

Et d'expliquer que sur eb Dev la demande ", la racine carrée il y a une partie du théorème de Pythagore:

a^2 + b^2 = c^2

Les lignes sur les axes X et Y peut être considéré comme deux branches d'un triangle à angle droit, et l'hypoténuse serait donc la distance entre deux points spécifiques (dont nous avons besoin).

Tout d'abord, nous soustrayons les points (x1 - x2, y1 - y2). Nous avons encore deux points, cependant, la partie à angle droit du triangle est maintenant à 0, 0 - le point où les axes X et Y croix. Pour pouvoir appliquer ce théorème de Pythagore, nous allons voir de quelle taille sont a et b va être - la longueur de la jambe a est la distance entre 0, 0 et le point 1. soustraction 0, 0 sera toujours laissez-nous avec un point seulement 1 - cependant, nous savons que ce sera quelque part sur l'axe X - donc son Y sera 0. on peut dire que la longueur de un égaux X partie du point 1.

la même chose pour b jambe et le point 2. Cette fois-ci, cependant, nous obtenons seulement une partie de celui-ci Y.

Et pour calculer c , nous allons d'abord résumer les deuxième puissances de a et < em> b (a ^ 2 + b ^ 2). Nous avons maintenant c ^ 2, pour ainsi obtenir le c -. Hypoténuse, nous allons calculer est la racine carrée (qui est Math.sqrt () dans AS3.0)

c est la distance.

Espérons que cela explique cela.

Autres conseils

Je pense que vous voulez que la vitesse minimum pour la distance plus petite.

const MIN_SPEED:Number = ???// adjust this value
var distance:Number = Math.sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
var duration:Number = Math.min(1.0, distance / MIN_SPEED);

1,0 pour les longues distances pour faible distance 1,0> distance / MIN_SPEED, et la durée seront mis à tourner à une certaine vitesse définie par MIN_SPEED.

Qu'est-ce que vous voulez faire est de calculer la distance entre les deux points et le temps soit par rapport à cela. Comment vous définissez exactement la relation dépend. Est une animation un seconde celui où la chose se déplace d'une extrémité de la scène à l'autre ou quoi. Ce sera votre base et toutes les animations seront par rapport à lui.

Alors disons qu'une animation sur toute la largeur de la scène est d'une seconde, et tout est plus courte que celle par rapport à celle d'une seconde.

dist = Math.sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
animTime = dist / state.stageWidth;

Mise à jour: Le Math.sqrt prend juste la racine carrée de la différence entre les points. Vous ne devez pas nécessairement le faire puisque vous ne souhaitez que la distance par rapport à la taille de la scène et non la distance réelle. La raison pour laquelle il est là est d'obtenir le retour à distance dans la même échelle que le stage.stageSize. Notez que la (x1-x2)*(x1-x2) est quadrature la distance entre le x1 et les coordonnées x2, ie. égal à Math.pow(x1-x2,2).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top