2010-02-15 12 views
3

Ok cette question va être un peu abstrait. J'ai une icône se déplaçant le long d'une ligne qui est représentée par une série de coordonnées stockées dans un vecteur, et je suis iterating à travers eux. La distance entre les coordonnées est variable. Ainsi, parfois l'icône se déplace lentement et sans heurts, et d'autres sautent de plusieurs centaines de pixels à la fois. J'ai des difficultés à trouver un algorithme pour diviser chaque ensemble de coordonnées qu'il doit parcourir entre un ensemble de coordonnées relatives où le nombre est basé sur la taille, de sorte que la transition est lisse, peu importe le nombre de co-ordures sont sur une seule ligne.Déplacement entre les coordonnées, les algorithmes Java

Toutes les idées seraient grandement appréciées. Merci :)

Répondre

1

Si vous voulez que l'objet se déplace à une vitesse constante, je suggère un modèle basé sur le temps, où votre objet se déplace réellement à une vitesse (pixels/seconde). Vous pouvez toujours l'obtenir pour frapper chaque point (ish) si vous splinez le long d'une courbe (comme une courbe catmull-rom).

2

Jetez un oeil à cette discussion sur le Main Game Loop.

Et voici une citation de cette page:

À cette étape, les mises à jour à tous les objets dans le monde du jeu sont calculés et exécutés. Habituellement, une valeur de pas de temps est passé à tous les méthodes de mise à jour indiquant combien temps a passé depuis la dernière mise à jour ...

Vous devez savoir 3 choses:

  • combien de temps s'est écoulé depuis la dernière mise à jour de la position de votre objet?
  • quel est le taux de mouvement de votre objet?
  • Quelle est la direction (habituellement représentée par un Rayon) que votre objet est en train de déplacer?

À partir de ceux-ci, vous pouvez calculer la position actuelle de l'objet.

0

Vous voulez donc passer d'un point initial (x0/y0) à un point final (x1/y1) le long d'une ligne par un nombre variable de pas mais avec une distance maximale pour chaque pas?

Cela pourrait se faire par quelque chose comme ceci:

int stepdist = 10; // max pixels per step 
double xdiff = x1 - x0; 
double ydiff = y1 - y0; 
double dist = sqrt(xdiff * xdiff + ydiff * ydiff); 
int steps = (int) ((dist - 1)/stepdist); 
if(steps > 0) 
{ 
    xdiff /= steps; 
    ydiff /= steps; 
    while(--steps >= 0) 
    { 
     x0 += xdiff; 
     y0 += ydiff; 
     moveTo((int) x0, (int) y0); 
    } 
} 
moveTo((int) x1, (int) y1);