Problema con una colision [Solucionado]

Hola a todos, tengo un problema, he creado un minijuego en que consiste en dispararle (con el actor “Torreta”) a un grupo de monos cayendo desde arriba del escenario(es decir como el ejemplo del minijuego “invasores” en pilas), he logrado hacer que cuando el mono colisione con la torreta esta desaparezca, Pero no tengo idea de como hacer que cuando un disparo de la torreta colisione con el mono, este desaparezca, aqui esta el codigo:

# -*- coding: utf-8
import pilasengine

pilas = pilasengine.iniciar()

#Iniciando el puntaje
puntaje = pilas.actores.Puntaje(-280, 200, color=pilas.colores.blanco)

#Iniciando el Fondo
fondo = pilas.fondos.Selva()

    #Iniciando la clase de los monos
class MonoEnemigos(pilasengine.actores.Mono):

    def iniciar(self):
        self.imagen = "mono.png"
        self.aprender( pilas.habilidades.PuedeExplotarConHumo )
        self.x = pilas.azar(-200, 200)
        self.y = 290
        self.velocidad = pilas.azar(10, 40) / 10.0
        self.escala = 0.43
        
    def actualizar(self):
        self.rotacion += 10
        self.y -= self.velocidad

        # Elimina el objeto cuando sale de la pantalla.
        if self.y < -300:
            self.eliminar()


enemigos = pilas.actores.Grupo()

def crear_enemigo():
    actor = MonoEnemigos(pilas)
    enemigos.agregar(actor)

pilas.tareas.siempre(0.5, crear_enemigo)


#Declarando la torreta y sus comportamientos

torre = pilas.actores.Torreta()
torre.y = -200
torre.aprender(pilas.habilidades.PuedeExplotarConHumo)

#Haciendo las colisiones:

pilas.colisiones.agregar(torre, enemigos, torre.eliminar)


pilas.avisar(u"Utiliza el Mouse para disparar")

pilas.ejecutar()

Espero haberme explicado bien :slight_smile:

Hola @Brayan_Garcia, para mí la forma más sencilla de establecer la colisión es usando etiquetas. En este caso, el enemigo seguro va a tener la etiqueta “MonoEnemigos” (porque es el nombre de la clase) y los disparos van a tener la etiqueta “bala”.

Mirá lo que agregué al código, es muy parecido a como definiste la colisión entre el mono y la torreta, pero usando etiquetas:

Así quedó el código:

# -*- coding: utf-8
import pilasengine

pilas = pilasengine.iniciar()

#Iniciando el puntaje
puntaje = pilas.actores.Puntaje(-280, 200, color=pilas.colores.blanco)

#Iniciando el Fondo
fondo = pilas.fondos.Selva()

    #Iniciando la clase de los monos
class MonoEnemigos(pilasengine.actores.Mono):

    def iniciar(self):
        self.imagen = "mono.png"
        self.aprender( pilas.habilidades.PuedeExplotarConHumo )
        self.x = pilas.azar(-200, 200)
        self.y = 290
        self.velocidad = pilas.azar(10, 40) / 10.0
        self.escala = 0.43
        
    def actualizar(self):
        self.rotacion += 10
        self.y -= self.velocidad

        # Elimina el objeto cuando sale de la pantalla.
        if self.y < -300:
            self.eliminar()


enemigos = pilas.actores.Grupo()

def crear_enemigo():
    actor = MonoEnemigos(pilas)
    enemigos.agregar(actor)

pilas.tareas.siempre(0.5, crear_enemigo)


#Declarando la torreta y sus comportamientos

torre = pilas.actores.Torreta()
torre.y = -200
torre.aprender(pilas.habilidades.PuedeExplotarConHumo)

#Haciendo las colisiones:

pilas.colisiones.agregar(torre, enemigos, torre.eliminar)

def eliminar_enemigo(disparo, enemigo):
    enemigo.eliminar()
    disparo.eliminar() # si elimino esta linea el disparo continua.
    
pilas.colisiones.agregar('bala', 'MonoEnemigos', eliminar_enemigo)

pilas.avisar(u"Utiliza el Mouse para disparar")

pilas.ejecutar()

Ah, por cierto, hay todo un capítulo acerca de etiquetas por si querés profundizar y conocer otros usos:

http://manual.pilas-engine.com.ar/etiquetas/

Saludos!

1 Like

Muchas gracias, funciono todo correctamente, pero tengo una duda, como hago para que el minijuego tenga un limite de tiempo?

Hola @Brayan_Garcia, para mí lo más sencillo para colocar un límite de tiempo en pilas es usando tareas. Mirá algunos ejemplos en el manual:

http://manual.pilas-engine.com.ar/tareas/#manejo-de-tiempo-con-tareas

Lo malo es que las tareas son “invisibles” al usuario, así que tendrías que poner un contador visible en pantalla. Podrías usar el código del reloj digital que tiene implementado el ejemplo “reloj”:

1 Like