2017-01-29 1 views
1

J'ai actuellement un jeu 2D dans lequel j'essaie de déplacer une image .png suivant certaines coordonnées. Si j'où placer cet objet à (0,0) et ensuite essayer de passer à (500500), je pouvais faire ce qui suit:Comment déplacer un objet d'un point à un autre via des coordonnées?

public void move() { 
    if (x < 500) { 
     x += velocityX; 
    } 
    if (y < 500) { 
     y += velocityY; 
    } 
} 

Ce travaillerais, mais seulement parce que sa ligne diagonale parfaitement. Avec ce système, je ne peux déplacer l'objet que horizontalement, verticalement ou en diagonale, mais jamais entre les deux. Si je devais essayer quelque chose comme:

public void move() { 
    if (x < 500) { 
     x += velocityX; 
    } 
    if (y < 400) { 
     y += velocityY; 
    } 
} 

L'objet serait tout simplement se déplacer dans un angle en diagonale parfaite jusqu'à ce qu'il atteigne 400 sur l'axe y, il se déplacerait horizontalement pour le dernier bit pour atteindre 500 sur l'axe x. Comment ferais-je pour que je puisse déplacer l'objet à n'importe quelle coordonnée tout en suivant un chemin droit?

+1

Arithmétique. Déterminez la distance à laquelle vous voulez déplacer l'objet (sur chaque axe); divisez les distances par le nombre de pas que vous voulez faire; ajouter à x et y respectivement. – khelwood

+0

@khelwood Nombre de pas? –

+0

nombre de marches signifie après combien de tours vous voulez que votre image soit en haut. –

Répondre

0

Pour vous déplacer en diagonale parfaite dans votre fenêtre, vous devez vous assurer que le rapport de velocityX et velocityY` devrait être comme ça,

velocityX   width 
----------- = ----------- 
velocityY   height 

dans votre cas si width est de 500, 400 et height est si velocityX est 5, puis

velocityY should be 4 
+0

Cela fonctionne quand 'velocityX = 5' et' velocityY = 4', mais pas quand 'velocityX = 2' et' velocityY = 1.6' même si c'est exactement le même rapport et c'est le résultat de cette équation. –

+0

'4' est' int' tandis que '1.6' est' float'. rendre toutes les variables connexes comme 'float', alors cela fonctionnera bien. –