Esta es probablemente una simple pregunta vectorial, pero no estoy seguro de cómo hacerlo.
Tengo un objeto en posición vectorial (ox,oy)
. Potencialmente, en cada actualización, el usuario recorre la pantalla y estará en posición (px,py)
en cualquier momento. ¿Cómo hago para que el objeto esté siempre orientado hacia el jugador? Necesito obtener el ángulo en grados.
Esto es con lo que he estado jugando, pero la dirección no señala inmediatamente dónde está ubicado el usuario. En cambio, se incrementa lentamente en la dirección en que camina el usuario.
objVec.Normalize();
playerVec.Normalize();
obj.Rotation = MathHelper.ToDegrees((float)Math.Acos(Vector2.Dot(objVec, playerVec)));
Podría estar haciendo esto completamente mal, por lo que cualquier ayuda es apreciada.
Respuestas:
Piensa en el problema de manera diferente. Desea oponerse siempre a "enfrentar" al jugador, lo que significa que desea que su vector "hacia adelante" girado sea paralelo al vector de sí mismo al jugador. Suponiendo que su vector "directo" está normalmente en
obj.Rotation = 0
, la rotación adecuada es básicamente el arcotangente deVector2.Subtract(playerPos, objectPos)
. La mayoría de las bibliotecas de matemáticas tendrán algo comoatan2
eso, toma dos argumentos o unoVector2
que determinará automáticamente el cuadrante adecuado para usted.EDITAR: Me di cuenta de que estás en C # y estas son en realidad clases integradas. Para que no tenga que ir a buscar documentación de la biblioteca de matemáticas, yo puedo hacerlo por usted. El código correcto debería ser:
Tenga en cuenta la inversión X / Y; para las pasas histéricas, Atan2 siempre tiene los argumentos invertidos.
fuente