Ataques del enemigo

Hola todos. Felicitaciones @hugoriscitti por la nueva mejoras que le diste a pilas engine. Quisiera saber cómo hago para que el enemigo note mi presencia a una cierta distancia. Y él me dispare y si me alegro lo deje de hacer?

Hola @VictorRico!!!, para mí una forma de implementar esta funcionalidad es utilizando autómatas y la función obtener_distancia_al_actor.

Vamos a suponer que tu protagonista es una nave, y el enemigo es una cara que aparece en la parte superior de la pantalla:

image

También vamos a suponer que la nave se puede mover libremente, pero cuando se encuentra muy cerca del enemigo este cambia de actitud y comienza a dispararnos!

image

La estrategia básica es que el enemigo podría estar mirando constantemente la distancia que tiene hacia la nave. Y cuando esa distancia es menor a 200 píxeles comienza a atacarlo:

image

Podríamos describir a estos dos estados del enemigo así:

image

Para esto deberíamos crear dos estados: un estado llamado “alejado” (que mostrará la cara feliz) y un segundo estado llamado “enojado” que disparará cada un segundo.

Estos estados se pueden crear directamente desde el menú de recetas de pilas así:

image

Ahora bien, ¿Cómo podríamos detectar si el enemigo y la nave están a una distancia de 200 píxeles?. Lo más sencillo es llamar a la función obtener_distancia_al_actor y comparar el valor que te retorna contra el número 200:


    let nave = this.pilas.obtener_actor_por_nombre("nave");

    if (this.obtener_distancia_al_actor(nave) < 200) {
      // la nave está cerca, a menos de 200 pixeles
      this.estado = "enojado";
    } else {
      // la nave se alejó
    }

Te paso el código completo para que lo puedas investigar, ten en cuenta que es solo un ejemplo, los disparos no hacen nada…

https://app.pilas-engine.com.ar/#/proyecto/8508e09d-aad1-469f-93d4-fb898bdce0a3

No detallé mucho el tema de los autómatas aquí, pero si queres investigar más está el manual y un video tutorial bastante completo en youtube.

¡Avisame cualquier cosa!

2 Likes

Gracias por tu ayuda Hugo