Как повернуть вектор2 вокруг другого вектора2? - PullRequest
2 голосов
/ 21 октября 2011

Я сейчас нахожусь в процессе создания игры. Игра состоит из игрока, управляющего роботом сверху вниз. Движение, столкновения и стрельба - все реализовано.

Тем не менее, у робота есть 2 «руки», из которых он стреляет из своего оружия, чтобы стрелять из этих рук, я в основном установил 2 временные места, из которых робот может стрелять, по одному на каждую руку, состоящую из смещения в Направление X +/- 15. Когда игрок смотрит вниз, руки стреляют нормально, и пули, кажется, выходят из рук роботов, однако, когда я поворачиваю плеер, чтобы посмотреть влево или вправо по оси Y, кажется, что робот стреляет пулями изнутри своего тела. У меня есть изображение, чтобы проиллюстрировать проблему

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

Как видите, точки появления левого и правого снарядов находятся в правильном положении, пока тело робота не будет повернуто. То, что я хочу сделать, это вращать эти две позиции Vector2 вокруг тела робота. Красные блоки показывают, откуда берутся снаряды, а белые блоки показывают, где бы я хотел, чтобы была позиция появления. Я пробовал несколько методов ротации, но ни один из них не дал эффекта после.

Есть какие-нибудь подсказки?

Ответы [ 3 ]

4 голосов
/ 21 октября 2011

Вы можете сделать это с помощью аффинного преобразования ... но, в вашем случае, это может быть проще сделать с помощью базового трига.

LET X, Y - местоположение робота.

LET T - угол поворота робота.

LET DXбыть расстояние от центра робота до «руки».(используйте -DX для другой руки).

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

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

1 голос
/ 21 октября 2011

Полагаю, у вас есть прямое направление и центр для вашего робота, тогда

 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 голосов
/ 21 октября 2011

Похоже, вы правильно вращаете сами векторы.Часть, которую вы упускаете, состоит в том, что вам нужно закодировать положение основания / хвоста вашего вектора (место, откуда он начинается) как вектор и также повернуть его.

...