Actualmente estoy estudiando el desarrollo de juegos XNA con el lenguaje C #.
Tengo dos clases: el controlador principal del juego y una clase de "sprite". A continuación se incluye un pseudocódigo básico que espero describa adecuadamente el problema.
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
}
}
}
Básicamente: cuando el usuario hace clic en algún lugar de la ventana del juego, se toman las coordenadas x e y del mouse, y el objeto del juego se moverá hacia esa ubicación durante un período de tiempo.
Bueno ... el código funciona, pero es feo y los objetos no se mueven directamente hacia el objeto (en cambio, es un movimiento diagonal, seguido de un movimiento de un solo eje). Supongo que hay algunas funciones matemáticas que puedo usar, pero honestamente no tengo idea de dónde comenzar. ¿Alguna sugerencia?