Entender los comportamientos de dirección perseguir y evadir

Hasta ahora hemos examinado los comportamientos de búsqueda, huida, llegada y dirección. En este tutorial, cubriré la búsqueda y el evadir Comportamientos, que hacen que tus personajes sigan o eviten al objetivo..

Nota: Aunque este tutorial está escrito con AS3 y Flash, debería poder usar las mismas técnicas y conceptos en casi cualquier entorno de desarrollo de juegos. Debes tener una comprensión básica de vectores matemáticos.


¿Qué es una búsqueda?

Una búsqueda es el proceso de seguir un objetivo con el objetivo de Atrapalo. Es importante tener en cuenta que la palabra "captura" hace toda la diferencia aquí. Si algo es solo seguir un objetivo, todo lo que tiene que hacer es repetir los movimientos del objetivo y, como consecuencia, estará en su camino..

Al perseguir algo, el perseguidor debe seguir el objetivo, pero también tiene que anticipar dónde estará el objetivo en el futuro cercano. Si puede predecir (o estimar) dónde estará el objetivo dentro de los siguientes segundos, es posible ajustar la trayectoria actual para evitar rutas innecesarias:


Prediciendo el futuro

Como se describe en los primeros tutoriales, el movimiento se calcula utilizando la integración de Euler:

posición = posición + velocidad

Como consecuencia directa, si se conoce la posición y la velocidad del personaje actual, es posible predecir dónde estará dentro de la siguiente T actualizaciones del juego. Suponiendo que el personaje se está moviendo en línea recta y la posición que queremos predecir es tres actualizaciones por delante (T = 3), la posición futura del personaje será:

posición = posición + velocidad * T

La clave para una buena predicción es el valor correcto para T. Si el valor es demasiado alto, significa que el perseguidor terminará persiguiendo a un fantasma. Si T es demasiado cerca de cero, significa que el perseguidor no está realmente persiguiendo el objetivo, sino que simplemente lo está siguiendo (sin predicción).

Si la predicción se calcula para cada marco de juego, funciona incluso si el objetivo cambia constantemente de dirección. Cada actualización se genera una nueva "posición futura" basada en el vector de velocidad actual del personaje (que también guía la dirección del movimiento).


Perseguir

La conducta de búsqueda funciona de la misma manera que la búsqueda, la única diferencia es que el perseguidor no buscará el objetivo en sí mismo, sino su posición en el futuro cercano.

Asumiendo que cada personaje en el juego está representado por una clase llamada Boid, el siguiente pseudocódigo implementa la idea básica detrás del comportamiento de búsqueda:

 búsqueda de funciones públicas (t: Boid): Vector3D T: int = 3; futurePosition: Vector3D = t.position + t.velocity * T; búsqueda de retorno (futurePosition); 

Después del cálculo de la fuerza de seguimiento, debe agregarse al vector de velocidad al igual que todas las fuerzas de dirección anteriores:

 actualización de la función pública (): void dirección = seguimiento (objetivo) dirección = truncar (dirección, fuerza máxima) dirección = dirección / velocidad de la masa = truncar (velocidad + dirección, velocidad máxima) posición = posición + velocidad

La siguiente figura ilustra el proceso:

El perseguidor (el personaje en la parte inferior) buscará la posición futura del objetivo, siguiendo una trayectoria descrita por la curva naranja. El resultado final será:


El comportamiento de persecución utilizando T = 30. Haga clic en la demostración para mostrar los vectores de fuerza. El objetivo busca el ratón..


Mejora de la precisión de la búsqueda

Hay un problema cuando el valor de T es constante: la precisión de la búsqueda tiende a ser pobre cuando el objetivo está cerca. Esto se debe a que cuando el objetivo está cerca, el perseguidor continuará buscando la predicción de la posición del objetivo, que es T marcos "lejos".

Ese comportamiento nunca ocurriría en una búsqueda real porque el perseguidor sabría que está lo suficientemente cerca del objetivo y debería dejar de predecir su posición.

Hay un truco simple que se puede implementar para evitar eso y mejorar drásticamente la precisión de la búsqueda. La idea es muy simple; en lugar de un valor constante para T, Se utiliza una dinámica:

 T = distanceBetweenTargetAndPursuer / MAX_VELOCITY

El nuevo T se calcula en función de la distancia entre los dos caracteres y la velocidad máxima que puede alcanzar el objetivo. En palabras sencillas lo nuevo. T medio "Cuántas actualizaciones necesita el objetivo para moverse desde su posición actual a la posición de perseguidor".

Cuanto mayor sea la distancia, mayor será la T será, por lo que el perseguidor buscará un punto muy por delante del objetivo. Cuanto menor sea la distancia, menor será la T será, lo que significa que buscará un punto muy cerca del objetivo. El nuevo código para esa implementación es:

 búsqueda de función pública (t: Boid): Vector3D var distance: Vector3D = t.position - position; var T: int = distance.length / MAX_VELOCITY; futurePosition: Vector3D = t.position + t.velocity * T; búsqueda de retorno (futurePosition); 

El resultado final es:


El comportamiento de persecución utilizando una dinámica. T. Haga clic en la demostración para mostrar los vectores de fuerza. El objetivo busca el ratón..


Evadir

El comportamiento de evasión es el opuesto al comportamiento de persecución. En lugar de buscar la posición futura del objetivo, en el comportamiento de evasión el personaje huirá de esa posición:

El código para evadir es casi idéntico, solo se cambia la última línea:

 función pública evade (t: Boid): Vector3D var distance: Vector3D = t.position - position; var updatesAhead: int = distance.length / MAX_VELOCITY; futurePosition: Vector3D = t.position + t.velocity * updatesAhead; regreso huir (futurePosition); 

El resultado final es el siguiente:


El comportamiento de evasión. Haga clic en la demostración para mostrar los vectores de fuerza. El objetivo busca el ratón..

Conclusión

Este tutorial describe la búsqueda y los comportamientos de evasión, que son excelentes para simular una variedad de patrones, como un grupo de animales que intentan escapar de un cazador..

Espero que hayas disfrutado de estos consejos hasta ahora y puedas comenzar a usar todos esos comportamientos, ¡combinándolos para crear patrones aún mejores! Manténgase actualizado al seguirnos en Twitter, Facebook o Google+.