Atualmente, estou olhando para o desenvolvimento de jogos XNA com a linguagem C #.
Eu tenho duas classes: o principal manipulador de jogos e uma classe "sprite". A seguir, apresentamos alguns pseudocódigos básicos que, espero, descrevam adequadamente o 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
}
}
}
Basicamente: quando o usuário clica em algum lugar da janela do jogo, as coordenadas xey do mouse são tomadas, e o objeto do jogo se move em direção a esse local por um período de tempo.
Bem ... o código funciona, mas é feio e os objetos não se movem diretamente em direção ao objeto (em vez disso, é um movimento diagonal, seguido pelo movimento de eixo único). Acho que existem algumas funções matemáticas que posso usar, mas sinceramente não tenho idéia de por onde começar. Alguma sugestão?
Respostas:
Se eu entendo seu problema corretamente, você deve ter uma direção Vector2 representando a direção que deseja mover dentro da sua classe de sprite. Como isso:
Este é o vetor normalizado (o que significa que ele tem um comprimento de 1) mostrando para onde você deseja ir.
Em seguida, adicione uma propriedade Speed float, que indica a rapidez com que o sprite deve ir.
Você também precisa adicionar uma função UpdateSprite. Por que não colocá-la na sua classe Sprite?
Isso atualizará a posição do sprite para fazê-lo se mover (você multiplica pelos segundos delta para que o sprite se mova corretamente também em computadores lentos).
Por fim, você acabou de definir sua propriedade direction como esta:
fonte
Normalização do Google ... também estou um pouco perdido com isso, mas tenho certeza de que isso ajudará a resolver seu problema. Alguém pode elaborar ou refutar minha resposta, tenho certeza
Edit: Eu poderia responder melhor, desculpas
Pessoalmente, sempre procuro este post do blog para ajudar com esses tipos de problemas: http://blog.wolfire.com/2009/07/linear-algebra-for-game-developers-part-1/
Começa do zero e é relevante para o desenvolvimento de jogos.
fonte