Люди отвечают на ваш вопрос на очень низком уровне.Иногда это помогает думать о проблеме на более высоком уровне.
Что вам нужно, это тип управления состоянием.Причудливый термин Computer Science для этого - конечный автомат.Но не надо сейчас искать это.Сначала это довольно сухо и запутанно:)
У вашего персонажа в данный момент есть одно состояние - «стоять вокруг».Вам нужно добавить и обработать состояние «ходьбы до места назначения».
Из того, что я прочитал для других вводов мышью, я думаю, что мне понадобится какой-то цикл
Вам нужен один цикл, называемый игровым циклом.Если вы используете XNA, у вас уже есть один.Но вы на правильном пути.
Каждый раз в игровом цикле вы должны обрабатывать текущее состояние и проверять то, что называется переходами между состояниями.Это когда вы меняете что-то в своем мире из одного состояния в другое.Например, когда вы щелкаете мышью, вы хотите, чтобы парень начал двигаться.
В игровом цикле вы проверяете, не произошло ли щелчка мышью.Если это так, то настройте некоторые данные (куда двигаться) и скажите ему, чтобы он начал ходить, установив его состояние «ходьба к месту назначения».В следующем обновлении вы будете обрабатывать это состояние вместо этого.
Когда ваш персонаж находится в состоянии «прогулки по назначению», вам необходимо обновить его положение, исходя из количества времени, прошедшего с момента последнего обновления игры,В XNA это рассчитывается для вас.Если вы не используете XNA, вам придется проверить себя.Возможно, вы сможете использовать что-то вроде класса Stopwatch
и проверить поле Elapsed
.
Если персонаж находится в пункте назначения, вам необходимо переключить его обратно в состояние «стояния».
Если вы получили еще один щелчок мыши, то вам решать, хотите ли вы, чтобы состояние «ходьба к месту назначения» обращало на это внимание или нет.Если вы обращаете на это внимание, вы настраиваете те же данные, что и при переходе из состояния «стояния».
Итак, вам понадобятся следующие переменные:
- Таймер, чтобы узнать, сколько времени прошло с момента последнего игрового цикла (XNA дает его вам)
- Текущее состояние игрока (может быть
enum
) - Текущая позиция игрока(вектор)
- Скорость ходьбы игрока (возможно, с плавающей точкой), измеряется в единицах в секунду (или миллисекундах)
- Данные для состояния «ходьба к месту назначения» - целевая позиция(другой вектор)
- Данные, относящиеся к пользовательскому вводу (события мыши, произошедшие с момента последнего обновления, положение этих щелчков и т. д.)
Данные, характерные для персонажа, будут другими длякаждый персонаж в вашей игре, поэтому вы хотите новую копию для каждого.Вы, вероятно, захотите поместить это в класс.Все остальное носит более глобальный характер, поэтому вы можете оставить его отдельно или сделать его частью своей игры, игрового цикла, классов ввода и т. Д. (Как бы вы ни решили организовать это).
Я не буду освещатьвекторная математика для того, как на самом деле рассчитать частичное движение, так как другие люди это охватили.Нет смысла дублировать эти ответы.В основном это сводится к созданию вектора между вашей текущей позицией и целевой позицией и умножению / делению его на вашу скорость ходьбы (чтобы разделить его на расстояние, пройденное в одном обновлении).