¿Cómo manejar la búsqueda y el movimiento de la entidad en un gran mundo en red?

12

ingrese la descripción de la imagen aquíTeniendo en cuenta la imagen de arriba con fichas divididas en cajas de 32x32, tengo una entidad que está marcada para 'aggro' a los jugadores cercanos que se acercan. Me gustaría que este monstruo persiga idealmente al jugador (y continúe persiguiendo al jugador por un tiempo). Actualmente, mi único movimiento es un interpolador simple para entidades remotas y esto funciona porque las brechas entre las actualizaciones de movimiento son bastante pequeñas.

No puedo decirle al cliente con éxito que el monstruo quiere moverse a la posición en la que se encuentra, ya que eso hará que la entidad se mueva mucho más rápido de lo que debería (esto probablemente se puede resolver usando algunas matemáticas para la copo de interpolación -eficaz), pero lo más importante es que no parece realista y puede cortar paredes. No quiero simular todo el movimiento en el servidor si se puede evitar ... aunque supongo que podría pero eso no resolvería el problema de recorte. Sospecho que la solución implica buscar rutas y enviar actualizaciones periódicas de los nodos del cliente y dejar que simulen el movimiento, pero no estoy seguro.

¡Gracias!

Vaughan Hilts
fuente

Respuestas:

9

Para un comienzo simple, puede implementar comportamientos de dirección . Específicamente buscar comportamientos . ingrese la descripción de la imagen aquí

Además de buscar a los personajes, debe usar la evitación para alejarse de los obstáculos .

ingrese la descripción de la imagen aquí

Una vez que tenga esos aspectos funcionando, puede implementar algunos seguidores más inteligentes. Eso incluiría encontrar el camino. Ahora, en lugar de dirigirse hacia sus enemigos, los enemigos se dirigirán hacia cada nodo en el camino que los lleva a su objetivo.

Una vez que el enemigo se "acerca lo suficiente", puedes cambiar a comportamientos completamente de dirección. Dado que son menos costosos que la búsqueda de rutas, obtendrá resultados que son buenos a corta distancia.

La dirección también te permitirá definir velocidades máximas de giro y velocidades máximas para los enemigos.

La dirección se puede administrar en el cliente con actualizaciones periódicas del servidor para garantizar que todavía estén en camino.

MichaelHouse
fuente
¿Significaría esto simular también el comportamiento de dirección en el servidor o puedo lógicamente 'ajustar' la entidad a lo largo del camino? No necesito una gran precisión.
Vaughan Hilts
La dirección sola tendría que ser simulada (aunque no es muy pesada). Sin embargo, la dirección hacia los puntos de referencia podría actualizarse sin simulación. Simplemente asegúrese de que el cliente esté dentro del alcance del punto de referencia "actual" y diríjase hacia el punto de referencia correcto como su "siguiente". Esto implicaría algunos ajustes si la entidad se desviara y se actualizara repentinamente.
MichaelHouse
+1 por gran respuesta. Gracias por salvarme varias horas.
Md Mahbubur Rahman
1

No puedo decirle al cliente con éxito que el monstruo quiere moverse a la posición en la que se encuentra, ya que eso hará que la entidad se mueva mucho más rápido de lo que debería (esto probablemente se puede resolver usando algunas matemáticas para la copo de interpolación -eficaz)

En realidad, esto es simple de hacer. La dirección del movimiento será la posición objetivo menos la posición actual. Todo lo que necesita hacer es escalar ese vector hasta la velocidad de movimiento que realmente desea. Repite cada cuadro.

¡Pero lo más importante es que no parece realista y puede cortar paredes! No quiero simular todo el movimiento en el servidor si se puede evitar ...

Necesita simular el movimiento en el servidor. ¿De qué otra manera sabrás que todos los jugadores están viendo el mismo comportamiento?

Necesitará alguna ruta básica. A * es el estándar. Puede calcular una ruta hacia el objetivo y luego seguir esa ruta es simplemente un caso de establecer vectores de movimiento como el anterior. (O puede usar comportamientos de dirección como en la respuesta de Byte56, que es esencialmente lo mismo con algunos extras adicionales).

Kylotan
fuente