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?
Respuestas:
Si entiendo su problema correctamente, debería tener una dirección Vector2 que represente la dirección en la que desea moverse dentro de su clase de sprite. Me gusta esto:
Este es el vector normalizado (lo que significa que tiene una longitud de 1) que muestra hacia dónde desea ir.
Luego, agregue una propiedad de flotación de Velocidad, que dice qué tan rápido debe ir el sprite.
También necesita agregar una función UpdateSprite, entonces, ¿por qué no ponerla dentro de su clase Sprite?
Esto actualizará la posición del sprite para que se mueva (multiplicas por los segundos delta para que el sprite se mueva correctamente en computadoras lentas también).
Finalmente, solo establece su propiedad de dirección de esta manera:
fuente
Normalización de Google ... También estoy un poco perdido en esto, pero estoy bastante seguro de que esto ayudará a resolver su problema. Alguien más puede elaborar o refutar mi respuesta, estoy seguro
Editar: podría responder esto mejor, disculpas
Personalmente, siempre miro esta publicación de blog para ayudar con este tipo de problemas: http://blog.wolfire.com/2009/07/linear-algebra-for-game-developers-part-1/
Comienza desde cero y es relevante para el desarrollo del juego.
fuente