AI para enemigos en plataformas - hasta 2/5/2015

1
  • 1 favourites

Tagged

Attached Files

The following files have been attached to this tutorial:

.capx

platformer-ai-tutorial.capx

Download now 183.03 KB

Stats

2,140 visits, 2,402 views

Tools

License

This tutorial is licensed under CC BY 4.0. Please refer to the license text if you wish to reuse, share or remix the content contained within this tutorial.

ACTUALIZACIÓN - 2/5/2015

El archivo ahora corrige el hecho de que la animación "Idle" no cambie si no está ordenada primero en la lista de animaciones de "Enemy"

ACTUALIZACIÓN - 2/5/2015

Siempre veo gente preguntando cómo codificar enemigos básicos que "patrullan" un área y/o enemigos básicos que te siguen si estás cerca a ellos y atacan cuando estás casi junto a ellos.

Me gustaría compartir mi método

Creen una variable de instancia para los enemigos llamada "AI" (numérica), valor inicial 0

ALEATORIZAR SI CAMINA A LA DERECHA O IZQUIERDA

AI = 0

Every 2 secs,

For Each: Enemy

-> Set enemy to Idle animation

-> Set AI to choose(1,2)

CAMINA DERECHA

AI = 1

For Each: Enemy

-> Simulate enemy "Right"

-> Set enemy to walk animation

-> Set enemy Not Mirrored

-> Set Platform: Max Speed to 50

CAMINA IZQUIERDA

AI = 2

For Each: Enemy

-> Simulate enemy "Left"

-> Set enemy to walk animation

-> Set enemy Mirrored

-> Set Platform: Max Speed to 50

CAMBIA DIRECCIÓN A DERECHA

Enemy has a wall to left

For Each: Enemy

-> Set AI to 1

CAMBIA DIRECCIÓN A IZQUERDA

Enemy has a wall to right

For Each: Enemy

-> Set AI to 2

Esta es una AI básica. Pueden colocar AI = 3 para correr a la derecha, 4 para correr a la izquierda, 5 para atacar, 6 para el daño, etc. si quieren una AI más compleja.

Para correr y atacar, yo sugiero usar una variable para guardar la distancia entre tu personaje y todos los enemigos, así cada uno calculará su propia y única distancia entre el jugador; luego usar esa variable de distancia para determinar cuándo el enemigo atacará (por ejemplo X<50 cuando el rango de ataque está cerca, x>150 cuando está lejos). Para diferenciar correr de caminar por la velocidad, ajusten ambas velocidades máximas y vectores x para ambos correr y caminar. Claro que las animaciones de correr y caminar deben ser diferentes, o por lo menos tener diferentes velocidades de animación.

Crear una variable de instancia llamada EnemyXDistance y EnemyYDistance

CALCULAR DISTANCIA

Every Tick

For Each: Enemy

-> Set EnemyXDistance to abs(Enemy.X-Player.X)

-> Set EnemyYDistance to abs(Enemy.Y-Player.Y)

Decidí hacer de X y Y distancias variables porque habrán momentos en los que van a necesitar la distancia Y (Ejm. Si el ataque es para arriba, o cuando quieran atacar solo cuando estén cerca a ti, eje-sabio vertical). Recuerda, la calculación de distancia que ponemos en las varibles de instancia son calculadas usando el "abs" lo que significa que no nos dice si el enemigo está a la izquierda o derecha, arriba o abajo. En ese caso, necesitamos usar una condición adicional (Compare X y/o Compare Y) como se muestra a continuación:

CORRER DERECHA

AI = 3

-> Simulate enemy "Right"

-> Set enemy to walk animation

-> Set enemy Not Mirrored

-> Set Platform: Max Speed to 100

CORRER IZQUIERDA

AI = 4

-> Simulate enemy "Left"

-> Set enemy to walk animation

-> Set enemy Mirrored

-> Set Platform: Max Speed to 100

CUANDO CORRE A LA DERECHA

EnemyXDistance > 20

EnemyXDistance < 100

EnemyYDistance < 20

Enemy.X < Player.X <--- esto significa que el enemigo está al lado IZQUIERDO del jugador

For Each: Enemy

->Set AI to 3

CUANDO CORRE A LA IZQUIERDA

EnemyXDistance > 20

EnemyXDistance < 100

EnemyYDistance < 20

Enemy.X > Player.X <--- esto significa que el enemigo está al lado DERECHO del jugador

For Each: Enemy

->Set AI to 4

EnemyYDistance < 20

^

Usé esta condición de arriba para hacer que un enemigo corriera si el jugador está en 20 o menos. Esto significa que estan dejando pequeño un margen de error en la calculación de la distancia. También significa que los enemigos pueden corren en pendientes o suelo elevado (si es que hubiese) cuando la distancia Y con el jugador es de 20 o menos.

Lo bueno de este método es que pueden expandir su sitema AI asignando o añadiendo un nuevo valor a AI y no necesitan recodificar los códigos anteriores completamente (solo harían cambios mínimos si es necesario hacer cambios). Así que si quieren un salto, un teletransporte, daño, o otra cosa que les pueda pasar a tus enemigos, solo asignen un nuevo valor que no hayan usado aún.

Como AI = 0 es un valor predeterminado cuando haces a un enemigo caminar (izquierda or derecha), siempre coloquen AI de vuelta a 0 luego de hacer algo (después de atacar, después de que la animación de daño termine, después del teletransporte, etc. ya saben).

Recapitulación:

AI values

0 = Idle (aleatorizar si camina a la derecha o izquierda)

1 = Camina Derecha

2 = Camina Izqueirda

3 = Corre Derecha

4 = Corre Izquierda

Opcional:

5 = Salta

6 = Daño

7 = Ataca

8 = Guardia/Bloqueo

9 = Teletransporte

y así.

Recuerden utilizar siempre el "For Each: Enemy" en cada uno de los eventos de AI para hacer que cada enemigo actúe de manera independiente.

Pregunta:

¿Entonces, cómo AI = 7 podría ser utilizado para diferentes ataques (como por ejemplo, ataque 1 es un puñetazo y ataque 2 un disparo)?

Respuesta:

Voy a actualizar este tutorial para explicar cómo implementarlo. Por favor revisen el tutorial con frecuencia.

Trataré de hacer un capx en mi tiempo libre lo antes posible pero ustedes mismos pueden tratar. Es más fácil aprender cuando codifican ustedes mismos. Este es solo un AI básico y bastante directo.

Por favor dénle a favorito a este tutorial si les ayudó.

Por favor comenten si tienen algún problema. Trataré de ayudar lo más que pueda.

.CAPX

platformer-ai-tutorial.capx

Download now 183.03 KB
  • 0 Comments

  • Order by
Want to leave a comment? Login or Register an account!