2D вращение вектора вокруг точки (миникарта) - PullRequest
0 голосов
/ 02 июля 2018

Что я пытаюсь сделать:

  1. Визуализация небольшой миникарты с указанием местоположения текущего игрока и вражеские локации.
  2. Направление «вверх» на мини-карте 2D всегда должно покажите, что находится перед игроком в игре, тогда справа Направление должно показать, что находится справа от игрока, то же самое для вниз и влево.
  3. Игрок всегда должен быть в центре миникарты.

Что я уже сделал:

Рендеринг игрока на миникарте, основанный на его координатах x и y в игре, рендеринг врагов на миникарте, основанный на их координатах x и y. Когда я перемещаюсь в игре, враги на миникарте движутся относительно движений игрока.

Что я пытался (но не работал):

float radarX = 200;
float radarY = 200;
float zoom = 2;

// Function
float xOffset = radarX - LocalPlayer.Position.x;
float yOffset = radarY - LocalPlayer.Position.y;

draw(zoom *(LocalPlayer.Position.x + xOffset),
zoom * (LocalPlayer.Position.y + yOffset);

foreach(Player p in Game.OtherPlayers) // list of enemies
{
Vector2 rotatedLocation = VectorExt.Rotate(new Vector2(p.Position.x, p.Position.y), -LocalPlayer.Yaw - 90); // negate and -90 to convert to normal coordinate system (0 @ RHS, 90 @ Top, 180 @ LHS, 270 @ Bottom)

float tempX = zoom * (rotatedLocation.x + xOffset);
float tempY = zoom * (rotatedLocation.y + yOffset);

draw(myPen, zoom * (LocalPlayer.Position.x + xOffset), zoom * (LocalPlayer.Position.y + yOffset);
}
// End of function

// VectorExt.Rotate
var ca = Math.Cos(radians);
var sa = Math.Sin(radians);
return new Vector2(Convert.ToSingle(ca * v.x - sa * v.y), Convert.ToSingle(sa * v.x + ca * v.y));
// End of VectorExt.Rotate

Заранее спасибо.

1 Ответ

0 голосов
/ 02 июля 2018

Когда вы поворачиваете своего игрока в игре, враги вращаются, однако они, кажется, вращаются вокруг оси 0,0, а не игрока.

Да, это то, что делает ваш код ротации. Чтобы повернуть вокруг другой точки, вы должны сначала вычесть координаты этого центра вращения, затем выполнить вращение, а затем снова добавить координаты центра вращения.

См. Также этот другой вопрос C ++ .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...