Ребята, хоть убейте, не пойму в чём проблема. В C# двигаю пикачбокс в чекпоинт с использованием векторной математики. Использую её для того, чтобы пикачбокс двигался строго по диагонали, без рывков и без движения "лесенкой".
Но он, зараза, двигается как-то странно. В зависимости от изменения скорости он двигается сначала чисто по оси Х, потом на каком-то этапе по диагонали к чекпоинту.
Я уже много чего перепробовал, понимаю, что где-то я неправильно что-то сделал, но не могу понять, где.
Вот код:
// 1. Вычисление вектора направления
// Разница между целью и текущей позицией
float deltaX = targetPosition.X - currentPosition.X;
float deltaY = targetPosition.Y - currentPosition.Y;
// 2. Вычисление расстояния
float distance = (float)Math.Sqrt(deltaX * deltaX + deltaY * deltaY);
// Проверка на то, достигли ли мы цели
if (distance < Speed)
{
// Цель почти достигнута. Перемещаем юнит точно в цель и останавливаем таймер.
currentPosition = targetPosition;
moveTimer.Stop();
}
else
{
// 3. Нормализация вектора и применение скорости
// Нормализованный вектор направления (единичный вектор)
float unitX = deltaX / distance;
float unitY = deltaY / distance;
// Вектор движения за один тик (Направление * Скорость)
float moveStepX = unitX * Speed;
float moveStepY = unitY * Speed;
// 4. Обновление позиции
currentPosition.X += moveStepX;
currentPosition.Y += moveStepY;
}
// 5. Обновление отображения PictureBox
unitPictureBox.Location = new Point((int)currentPosition.X, (int)currentPosition.Y);
}
Ах да, забыл добавить. На всякий случай - всё делаю в Винформс, так как лично мне именно здесь видится чистый C#. Предполагаю, что ошибка совсем детская, но вот блин не могу понять, где она.
Спасибо!