Tengo una pregunta que me está volviendo loco porque creo que debería ser bastante fácil encontrar un tutorial al respecto. Actualmente estoy usando XNA y Farseer para crear un juego de plataformas simple. Estoy a punto de terminar, pero quiero que mis monstruos sean más inteligentes. En este caso, eso significa que no quiero que mis monstruos se caigan de los acantilados.
En pocas palabras, quiero algo que verifique el área frente a mi "monstruo" para determinar cuándo el monstruo debe cambiar de dirección. ¿Podrían ustedes señalarme en la dirección correcta?
¿Qué se supone que debo usar? Debe existir una solución simple o un algoritmo simple para verificar esto, ¿no?
fuente
Una forma ingenua de implementarlo es mediante el uso de raycasting.
Calcule dónde estará su monstruo en un poco de tiempo (probablemente un cuadro). Desde esa posición (o si quieres ser más robusto, esa posición +/- el área límite de tu enemigo) haz un rayo hacia abajo. Si no golpea algo dentro de un rango apropiado (dependiendo de dónde comience su emisión de rayos verticalmente, la altura del personaje, su "tamaño de paso" deseado, etc.) puede darse cuenta de que hay un acantilado donde el personaje quiere estar, y decide cambiar de dirección apropiadamente.
fuente
Con mi IA, simplemente verifico si hay una plataforma debajo y en la dirección de su viaje (sin usar un sistema de mosaico, solo un maravilloso sistema de colisión). Si no lo hay, o si golpea un bloque sólido, obtiene una mirada confusa y gira.
De esta manera, puede tener mapas dinámicos y aún tener una IA que funcione (término usado libremente).
fuente
Sospecho que está utilizando un mapa de mosaicos, en cuyo caso la solución sería hacerlo en función de los índices de mosaicos. Debes encontrar en qué mosaico está actualmente tu monstruo, con las siguientes fórmulas:
Una vez que sepa esto, debe encontrar en qué dirección X va (para verificar si hay bloques por delante):
Ahora tiene una dirección X normalizada para trabajar.
A continuación, querrá verificar los bloques para ver si debe cambiar de dirección:
Tienes la idea general. Asegúrate de regresar
TileCollision.Impassable
(o lo que sea) si los índices de mosaico están fuera del mapa, para evitar que tu programa se bloquee con un índice no válido, y también evita que los monstruos salgan del mapa.Supongo que realmente depende de la forma en que manejas los mosaicos, pero esta es la solución que funcionó para mí.
Basado en los tutoriales de http://www.sgtconker.com/ (aunque el sitio web está inactivo mientras escribo esto)
fuente
Establece una caja en el exterior de la plataforma que esté en una capa separada, y haz que los monstruos lo comprueben para que no se caigan, pero el jugador aún puede hacerlo.
fuente