В настоящее время я изучаю разработку игр для 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, и игровой объект перемещается к этому месту в течение определенного периода времени.
Ну ... код работает, но он уродлив, и объекты не двигаются прямо к объекту (вместо этого это диагональное движение, сопровождаемое движением по одной оси). Я предполагаю, что есть некоторые математические функции, которые я могу использовать, но я, честно говоря, понятия не имею, с чего начать. Какие-либо предложения?