El asistente del juego RPG quiere luchar automáticamente contra los monstruos
Después de obtener la información más reciente sobre monstruos, debes enfrentarte al monstruo.
De lo contrario, no hay forma de atacar y liberar habilidades cuando te enfrentas a monstruos, etc.
Hay muchas situaciones en la dirección del diseño del juego.
La primera
Juegos antiguos 2D, 2.5D como Legends
Su orientación es generalmente muy fija 4 orientaciones u 8 orientaciones
Es decir, no está orientado libremente y solo puede orientarse en cuatro direcciones, este, sur, norte y oeste.
O este, noreste, norte, noroeste, oeste, suroeste, sureste y 8 direcciones
Entonces el cálculo de la orientación también es muy simple.
Solo calcula la relación entre las coordenadas del monstruo y el personaje.
Por ejemplo
Monstruo X > personaje X && monstruo Y > personaje Y
Luego, si quieres enfrentar al monstruo, simplemente modifica el valor de orientación para mirar hacia el noreste.
Generalmente, las 8 orientaciones están representadas por 8 valores numéricos de 0-7
el segundo
Orientación libre versión 2D
Se dice que es una versión 2D de orientación libre, pero de hecho muchos juegos 3D la están usando
Una comprensión muy simple es que el juego es en 3D, pero el personaje solo puede girar en un plano 2D, y la cabeza no se puede levantar y pasar por alto.
Por ejemplo, QQ Viaje hacia el oeste
En general, el valor de orientación de este juego se organiza uniformemente en el sistema de coordenadas de 0 a un valor
Podemos calcularlo fácilmente calculando su ley cambiante
Por ejemplo, QQ Westward Journey aumenta en sentido contrario a las agujas del reloj desde el eje X positivo hasta 0
Se ha aumentado a 256 y luego se superpone con el eje X y se convierte en 0
Entonces conocemos la ley de su cambio, podemos implementar el código.
como sigue
DWORD Call_Angle hacia el monstruo (FLOAT x, FLOAT y)
{
atributo de carácter T A;
AC inicializar ();
FLOTANTE X=A.fX;
FLOTANTE Y=A.fY;
PALABRA D B=0;
if (x>X&&y>Y)//primer cuadrante
{
B=(DWORD)(atan2(yY,xX)/3.1415926 *180);//ángulo real
B=B*64/90 ;//Misma relación ángulo de juego
B=0+B;
}
if (x<X&&y>Y)//segundo cuadrante
{
B=(DWORD)(atan2(yY,Xx)/3.1415926 *180);
B=B*64/90;
B=128-B;
}
if (x<X&&y<Y)//tercer cuadrante
{
B=(DWORD)(atan2(Yy,Xx)/3.1415926 *180);
B=B*64/90;
B=128+B;
}
si (x>X&&y<Y)//cuarto cuadrante
{
B=(DWORD)(atan2(Yy,xX)/3.1415926 *180);
B=B*64/90;
B=256-B;
}
devolver B;
}
tercero
a través de la primera y la segunda
Podemos sentir claramente la actualización de 8 posiciones a varias posiciones.
Pero esto todavía no es suficiente, no importa en cuántas partes divida el sistema de coordenadas o no la libertad absoluta
entonces que debemos hacer?
El juego inventa una orientación más libre.
Por ejemplo, Tianya Mingyue Knife
tiene ese concepto de diseño
Toma al personaje como el centro y pasa un círculo con un radio general de 1 (no importa cuánto sea, podemos multiplicarlo)
Conecta la línea con el monstruo, la intersección del círculo es nuestra dirección.
Entonces esto se convierte en una orientación libre, puedes ser tan preciso como quieras
También es muy simple de calcular.
El origen del carácter, el punto de intersección del círculo, la línea perpendicular desde el punto de intersección hasta el eje X y el punto de intersección del eje X forman un triángulo
El origen del personaje, el punto de coordenadas del monstruo, el punto de intersección de la línea vertical desde el punto de coordenadas del monstruo al eje X y el eje X forman un triángulo
2 triangulos son triangulos semejantes
Luego el triangulo pequeño h/1 = (Y monstruo - Y personaje)/distancia
Triángulo pequeño l / 1 = (X monstruo - X personaje) / distancia
Las h y l obtenidas son las coordenadas de nuestra intersección circular.
Hay otras formas de sublimación
es la orientación de la versión 3D
Entonces ya no será un círculo.
es una pelota 3d
Pero el algoritmo permanece sin cambios.
solo ha cambiado la distancia
Triángulos semejantes siguen siendo triángulos semejantes
h=(Y monstruo-Y personaje)/distancia
l=(X monstruo-X personaje)/distancia
z=(Z monstruo-Z personaje)/distancia
Entre ellos distancia=sqrt((persona.fX-fX) (persona.fX-.fX)+(persona.fY-fY) (persona.fY-fY)+(persona.fZ-fZ)*(persona.fZ- fZ ));
cuatro
Generalmente utilizado por juegos FPS
También es el mismo ángulo que el transbordador espacial, etc.
es el ángulo de picado, el ángulo de balanceo y el ángulo de rotación
El ángulo de rotación representa su propia rotación, que es casi inútil en el juego.
Entonces el ángulo de picado representa el ángulo entre la dirección del cañón y el plano horizontal
El ángulo de giro representa el ángulo en el que la dirección de la pistola y la línea central giran hacia la izquierda y hacia la derecha.
El método de cálculo puede referirse al segundo método de arco tangente