В настоящее время я изучаю разработку игр для XNA на языке C #.
У меня есть два класса: основной обработчик игры и класс «спрайт». Ниже приведен базовый псевдокод, который, я надеюсь, адекватно описывает проблему.
Game.cs
class game {
sprite the_sprite;
void update(time) {
var mouse = mouse.state
if(mouse.clicked) { this.the_sprite.moveTo(mouse.x, mouse.y) }
this.the_sprite.update(time)
base.update(time)
}
}
Sprite.cs
class sprite {
vector2 location;
vector2 move_to;
void moveTo(x, y) { this.move_to = new vector2(x, y) }
void update(time) {
if(this.location.x > this.move_to.x /* (or less than) */) {
// adjust location.x
}
if(this.location.y > this.move_to.y /* (or greater than) */) {
// adjust location.y
}
}
}
В основном: когда пользователь щелкает где-то в окне игры, берутся координаты мыши x и y, и игровой объект перемещается к этому месту в течение определенного периода времени.
Ну ... код работает, но он уродлив, и объекты не двигаются прямо к объекту (вместо этого это диагональное движение, сопровождаемое движением по одной оси). Я предполагаю, что есть некоторые математические функции, которые я могу использовать, но я, честно говоря, понятия не имею, с чего начать. Какие-либо предложения?
Ответы:
Если я правильно понимаю вашу проблему, у вас должно быть направление Vector2, представляющее направление, в котором вы хотите двигаться, внутри вашего класса спрайтов. Нравится:
Это нормализованный вектор (что означает, что он имеет длину 1), показывающий, куда вы хотите перейти.
Затем добавьте свойство Speed float, которое говорит, как быстро должен работать спрайт.
Вам также необходимо добавить функцию UpdateSprite, так почему бы не поместить ее в свой класс Sprite?
Это обновит позицию спрайта, чтобы заставить его двигаться (вы умножаетесь на дельта-секунды, чтобы спрайт правильно перемещался и на медленных компьютерах).
Наконец, вы просто устанавливаете свойство direction так:
источник
Нормализация Google ... Я тоже немного растерялся, но уверен, что это поможет решить вашу проблему. Кто-то еще может уточнить или опровергнуть мой ответ, я уверен
Изменить: я мог бы ответить на этот вопрос лучше, извинения
Я лично всегда обращаюсь к этому сообщению в блоге, чтобы помочь с этими типами проблем: http://blog.wolfire.com/2009/07/linear-algebra-for-game-developers-part-1/
Он начинается с нуля и имеет отношение к разработке игр.
источник