2011-10-20 5 views
2

Je suis actuellement en train de faire un jeu. Le jeu consiste en ce que le joueur opère un robot d'une perspective descendante. Le mouvement, les collisions et le tir sont tous mis en œuvre. Cependant, le robot a 2 'bras' à partir desquels il tire ses armes, pour tirer à partir de ces bras j'ai essentiellement mis en place 2 emplacements de fortune pour le robot de tirer, un pour chaque bras, consistant en un décalage dans dans la direction X de +/- 15. Quand le joueur regarde vers le bas, les bras tirent bien et les balles semblent sortir des bras des robots, cependant, quand je tourne le joueur pour regarder vers la gauche ou la droite sur l'axe Y , il semble que le robot tue les balles à l'intérieur de son corps. J'ai une image pour illustrer la questionComment faire pivoter un vecteur2 autour d'un autre vecteur2?

http://imageshack.us/photo/my-images/694/problemrs.png/

Comme vous pouvez le voir, les points de réapparition du projectile à gauche et à droite sont dans la bonne position jusqu'à ce que le corps de robots tourne. Ce que je veux être capable de faire, c'est de faire pivoter ces 2 positions Vector2 autour du corps des robots. Les blocs rouges montrent d'où proviennent les projectiles, et les blocs blancs représentent où je voudrais que la position de réapparition soit. J'ai essayé quelques méthodes de rotation mais aucune n'a eu l'effet im après.

Des indices?

Répondre

4

Vous pourriez le faire avec une transformation affine ... mais, dans votre cas, il pourrait être plus facile de le faire avec un trig de base.

LET X, Y être l'emplacement du robot.

LET T être l'angle de rotation du robot.

LET DX être la distance entre le centre du robot et le «bras». (utilisez -DX pour l'autre bras).

ArmX = (cos (T) * DX) + X

ArmY = (sin (T) * DX) + Y

+1

Merci beaucoup, j'ai essayé quelques nombreuses formules différentes, et celui-ci est si simple, et fonctionne parfaitement, merci encore! : D – andeeeeeee

+0

Pas de problème! Je vois que vous êtes plutôt nouveau ici. Si ma réponse était utile, je serais très reconnaissant que vous votiez pour ma réponse et que la note soit «Acceptée» en cochant la case sous les flèches de vote! Merci! – Steve

1

Je suppose que, vous avez une direction vers l'avant et un centre pour votre robot, puis

F = forward vector 
c = center point 
d = distance from center to arms 

NF = normal to forward 

NF = new Vector2(F.Y, -F.X); 

NF.Normalize(); 

LeftArmShootOrigin = c + NF * d; 
RightArmShootOrigin = c - NF * d; 
0

On dirait que vous tourner les vecteurs eux-mêmes correctement. La partie qui vous manque est que vous devez encoder la position de la base/queue de votre vecteur (l'endroit à partir duquel il commence) comme un vecteur et faites-le tourner aussi.

Questions connexes