Прежде всего вам нужно разобраться в покрытии полного расстояния, это ваш вектор. Вектор - это движение, а не две точки в пространстве.
Затем вы просто делите каждое измерение, x и y в этом случае, на время, необходимое для перемещения в единицу измерения (в секундах), чтобы получить расстояние в секунду.
Затем вы умножаете каждый x и y на количество секунд от 0, то есть 1 секунду в вашем примере, чтобы получить позицию через 1 секунду.
Я не знаю, что доступно для вас в вашей базе или библиотеки, но хороший Vector
класс будет настолько полезным, вы хотите, чтобы быть в состоянии сделать математику на экземпляре вектора непосредственно, например:
Point origin = sprite.Position; // Assumes some sprite object with a position.
Point dest = new Point(200,344); // Destination.
Vector totalTranslation = new Vector(dest.X - origin.X, dest.Y - origin.Y);
Vector perSecond = totalTranslation/60; // assuming takes a minute to move.
Vector distanceMoved = perSecond * 4; // distance moved after 4 seconds.
Point newPosition = new Point(origin.X + distanceMoved.X, origin.Y + distanceMoved.Y);
sprite.Position = newPosition; // Or using some orchestration class...
spriteManager.Move(sprite, newPosition); // ...like this.
Примечание: возможность разделить вектор напрямую. Кроме того, вам нужно разделить каждый пространственный размер вектора и создать новый вектор или создать для него вспомогательный класс.
В реальной жизни вы можете рассчитывать на основе миллисекунд. Я бы не использовал фиксированный счетчик кадров, так как он мог выглядеть суровым, но работать все на основе таймера.
Как я уже сказал, здесь важна хорошая библиотека или неизменяемая структура Vector/class. Тогда это случай мышления о проблеме на графической бумаге.
Также создайте палитру небольших функций, которую вы можете объединить, чтобы сделать кулер, больше материала.
Еще одна интересная проблема заключается в использовании функции ослабления для выработки координаты по истечении заданного времени для достижения эффекта замедления спрайта, поскольку он «приземляется».
Вы спрашиваете, как решить эту проблему с помощью математики или как ее кодировать? –
Я хотел бы знать, как закодировать это – Linkpad
См. Мой обновленный ответ для примера кода. Не могу проверить это сейчас, но я думаю, вы получите эту идею. Я не знаю, какую библиотеку математики вы используете, поэтому я использовал Vector2-тип из инфраструктуры XNA. –