J'examine actuellement le développement de jeux XNA avec le langage C #.
J'ai deux classes: le gestionnaire de jeu principal et une classe "sprite". Voici un pseudo-code de base qui, je l'espère, décrit correctement le problème.
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
}
}
}
Fondamentalement: lorsque l'utilisateur clique quelque part dans la fenêtre de jeu, les coordonnées x et y de la souris sont prises et l'objet de jeu se déplace vers cet emplacement sur une période de temps.
Eh bien ... le code fonctionne, mais c'est moche, et les objets ne se déplacent pas directement vers l'objet (à la place, c'est un mouvement diagonal, suivi d'un mouvement à axe unique). Je suppose qu'il y a des fonctions mathématiques que je peux utiliser, mais je n'ai honnêtement aucune idée par où commencer. Aucune suggestion?
Réponses:
Si je comprends bien votre problème, vous devriez simplement avoir une direction Vector2 représentant la direction dans laquelle vous voulez vous déplacer dans votre classe de sprites. Comme ça:
Il s'agit du vecteur normalisé (ce qui signifie qu'il a une longueur de 1) indiquant où vous voulez aller.
Ensuite, ajoutez une propriété Speed float, qui indique la vitesse à laquelle le sprite doit aller.
Vous devez également ajouter une fonction UpdateSprite, alors pourquoi ne pas la mettre dans votre classe Sprite?
Cela mettra à jour la position du sprite pour le faire bouger (vous multipliez par les secondes delta pour que le sprite se déplace correctement sur les ordinateurs lents également).
Enfin, vous venez de définir votre propriété direction comme ceci:
la source
Normalisation de Google ... je suis également un peu perdu à ce sujet, mais je suis sûr que cela vous aidera à résoudre votre problème. Quelqu'un d'autre peut élaborer ou réfuter ma réponse, je suis sûr
Edit: je pourrais mieux répondre à cela, excuses
Personnellement, je regarde toujours ce billet de blog pour aider avec ces types de problèmes: http://blog.wolfire.com/2009/07/linear-algebra-for-game-developers-part-1/
Il part de zéro et est pertinent pour le développement de jeux.
la source