pilas-engine

Contador de vidas

Buenas tardes.
Realice mi primer juego siguiendo el ejemplo de nave_contra_aliens
Tengo una inquietud.
Como hacer cuando la nave toque al enemigo…o el enemigo toque la nave.
Exista una colisión.
Por ejemplo pierda una vida.
Si tengo 3 vidas…pierdo todas las vidas, pierda el juego.
Implementar un contador de vidas.
Gracias.

¡Hola @Marisol_Ramos!,

Para las colisiones entre nave y protagonista te conviene añadirles figuras a los dos actores, y luego escribir la función cuando_colisiona. Esta función se llamará automáticamente cuando se produzca la colisión entre los dos actores.

Aquí hay un video que lo explica en detalle:

(este video forma parte del tutorial que aparece en esta página: Videos | Pilas engine)

Luego, sobre el contador de pilas, lo que podrías hacer es crear una variable llamada vidas y guardarla dentro del proyecto. Algo similar a lo que hace aquí con la variable monedas:

Lo bueno de tener una variable que indique las vidas es que es muy fácil sumar o quitar vidas.

Avisame cualquier cosa, por ahí puedo armarte un ejemplo de contador de vidas más tarde.

¡Abrazo!

1 Like

Hola
Para eliminar la nave cuando colisiona con el enemigo.
He intentado hacer lo siguiente.

Ahora coloque este código en la nave:

cuando_colisiona(actor: Actor) {
    if (actor.tiene_etiqueta("enemigo")) {
      this.eliminar();
      actor.eliminar();

    }

Pero no me funciona. No elimina la nave.
Me he quedado pegada ahi.
pilas 1

¡Hola @Marisol_Ramos!, es raro que no se llame a esa función… te comento dos cosas que pueden estar ocasionando el problema:

  • Tanto la nave como el enemigo deberían tener figuras físicas, por ejemplo los dos podrían ser círculos no dinámicos. Esas figuras son las que pilas usa para saber si los actores están en contacto o no, así que son super importantes:

El atributo “dinámica” simplemente hace que el actor no empiece a rebotar como una pelota, sino que permanece estático para que lo muevas con el código.

  • La otra cosa a verificar es que el enemigo efectivamente tenga la etiqueta “enemigo” así:

image

ah, otra cosa para saber si el problema viene por ahí, es que una vez que lo veas funcionar el código se debería destacar en color violeta mostrando que efectivamente se está llamando:

image

Te paso un mini-ejemplo que armé recién:

Abrir este proyecto en el editor de pilas

Por cierto, voy a revisar el manual porque creo que no mencioné el tema de las figuras físicas. En breve lo voy a subir actualizado.

Avisame si con estos cambios te funcionan las colisiones!

Hola como estas.
Gracias ya solucione el problema de las colisiones. Era cambiar figura física de la nave: Circulo y luego desactivar opcion Dinámica. No me había dado cuenta de ese detalle. Soy algo despistada. Pero muchas gracias por la ayuda.
Ahora implemente la variable Vidas----> vidas 3
Al momento de colisionar la nave con el enemigo desaparece la nave me quita una vida.
Pero no vuelve a aparecer la nave.
Lo que necesito hacer es que descuente las vidas y vuelva a salir la nave al momento de tener vidas = 0 Fin del juego.
Como logro hacer eso…

Este es el juego:
JUEGO NAVES

¡Hola @Marisol_Ramos!, una forma de hacer que la nave vuelva a aparecer es escribir un código que haga que pilas espere dos segundos y luego vuelva a crear la nave así:

this.pilas.luego(2, () => {
  this.pilas.clonar("nave");
});

A esta función llamada luego se la menciona en el manual dentro de la sección manejo de tiempo

Ahora, lo malo de hacer eso es que ni bien pasan los 2 segundos, y la nave aparece, puede suceder que exista un enemigo justo en esa posición y vuelvas a perder :confused: de hecho me pasó eso cuando estaba probando…

Una forma de resolver ese otro problema es hacer que la nave aparezca semi-transparente, y que durante unos segundos no pueda ser golpeada. Esto es algo que se hace en varios juegos para evitar eso, sobre todo en los juegos de naves.

Esto se puede hacer en el mismo método iniciar de la nave así:


  iniciar() {
    this.contador_puede_disparar = 0;

    this.transparencia = 80;

    this.pilas.luego(1, () => {
      this.transparencia = [0];
    });

  }

Es decir, la nave tiene una transparencia del 80% y luego de un segundo pasa a 0% de transparencia. Los corchetes sirven para indicarle a pilas que haga una pequeña animación para pasar de 80% a 0% gradualmente.

Ah, y si haces ese cambio también tendrías que asegurarte que en la función cuando_colisiona se ignoren las colisiones cuando la nave tenga algún tipo de transparencia:

Te paso una versión con esas modificaciones, también agregué un texto tipo “game over”, pero creo que me faltó también agregar algún botón para volver a jugar. Mirá el actor “reiniciar nivel” que viene incluido en pilas, te puede servir para que el jugador pueda volver a jugar en caso de que haber perdido:

Ver juego en el editor

¡Abrazo!

1 Like

Muchas gracias por tu ayuda.
Quedo super bien el juego.
Antes si había hecho un juego similar en Scratch ya que he realizado varios proyectos en Scratch. Pero quiero hacer juegos en otra plataforma por eso busque y encontré Pilas. Me ha costado un poco. Pero ahí vamos con muchas ganas de aprender.
También he realizado actividades interactivas en PowerPoint aunque no se podrían llamar juegos ya que le faltan muchos elementos como aleatoriedad en fin.
Nuevamente gracias por la gran ayuda prestada.
Comenzare a realizar algunos tutoriales de Pilas me guiare por el Manual.
Abrazos.

1 Like