2010-03-15 7 views
2

mon objet à l'écran a une rotation var (en degrés).Comment faire un mouvement vectoriel 2d

Comment puis-je le réparer alors quand je pousse la flèche vers le haut, il se déplace vers l'avant et pas seulement x ++ et y ++?

+0

Je vous suggère de clarifier votre question, car ce n'est pas clair du tout de ce que vous parlez. – Will

+0

Il a un objet qui fait face à n'importe quelle direction (en degrés) et il veut faire avancer l'objet dans la direction vers laquelle il est orienté. En ce moment, il a les touches de mouvement juste pour ajouter et soustraire de x et y – Pyrolistical

+0

@pyro C'est ce que je pensais, mais je n'étais pas assez sûr pour éditer sa question ... – Will

Répondre

6
x += sin(rotation) * speed; 
y += cos(rotation) * speed; 

Mais cela dépend de l'orientation de votre rotation. Ce code fonctionnera pour la rotation orientée vers le haut (nord) à 0 degré, en se déplaçant dans le sens des aiguilles d'une montre.

+0

0 degrés pour le nord n'est pas standard. En mathématiques, 0 degrés est toujours à droite, en augmentant dans le sens inverse des aiguilles d'une montre. –

+1

C'est une question de goût. – Pindatjuh

1

Utiliser la trigonométrie. Vous avez l'angle et la longueur du mouvement (qui est votre hypoténuse) donc vous devriez être capable d'utiliser sin ou cos pour calculer la quantité de mouvement x et y nécessaire.

8

pas à 100% sûr que ce soit ce que vous voulez, mais je pense que vous voulez faire:

x += speed * cos(angle); 
y += speed * sin(angle); 

angle est la rotation de votre objet, et x et y sont ses coordonnées. speed est la vitesse de votre objet.

+0

C'est là que 0 degrés commence à droite (est) à 0 degré, en mouvement dans le sens antihoraire. – Pindatjuh

+0

lol, nos billets/commentaires se reproduisent pratiquement les uns les autres: P –

+0

Oui, assez marrant! : D – Pindatjuh

1

Juste pour préciser, puisque c'est C#, vous voulez faire ce

double radians = (Math.PI/180)*angleInDegrees; 
x += speed * Math.Cos(radians); 
y += speed * Math.Sin(radians); 

Comme d'autres l'ont mentionné, cela est basé sur l'utilisation de la trigonométrie pour appliquer une rotation à un vecteur de vitesse (dans ce cas, le vecteur 0 degrés pointe vers la droite).

Questions connexes