Provavelmente, essa é uma pergunta simples do vetor, mas não sei como fazê-lo.
Eu tenho um objeto na posição do vetor (ox,oy)
. Potencialmente, a cada atualização, o usuário percorre a tela e estará na posição (px,py)
a qualquer momento. Como faço para que o objeto esteja sempre voltado para o jogador? Eu preciso obter o ângulo em graus.
É com isso que eu ando brincando, mas a direção não aponta imediatamente para onde o usuário está localizado. Em vez disso, aumenta lentamente na direção em que o usuário está caminhando.
objVec.Normalize();
playerVec.Normalize();
obj.Rotation = MathHelper.ToDegrees((float)Math.Acos(Vector2.Dot(objVec, playerVec)));
Eu posso estar fazendo algo completamente errado, então qualquer ajuda é apreciada!
Respostas:
Pense sobre o problema de maneira diferente. Você deseja sempre objetar "encarar" o player, o que significa que você deseja que o vetor "forward" girado seja paralelo ao vetor de si mesmo ao player. Supondo que seu vetor "forward" esteja normalmente em
obj.Rotation = 0
, a rotação adequada é basicamente o arco tangente deVector2.Subtract(playerPos, objectPos)
. A maioria das bibliotecas de matemática terá algo parecido comatan2
isso: dois argumentos ou umVector2
que descobrirão automaticamente o quadrante certo para você.Edição: Eu percebi que você está em c # e estas são realmente classes internas. Para que você não precise procurar pela documentação da biblioteca de matemática, eu posso fazer isso por você. O código certo deve ser:
Observe a reversão X / Y; para passas histéricas, o Atan2 sempre inverte os argumentos.
fonte