Ayuda con la colision :(

import pilasengine

pilas = pilasengine.iniciar()
fondo = pilas.fondos.Fondo()
fondo.imagen = pilas.imagenes.cargar( 'fondo13.jpg')
puntos = pilas.actores.Puntaje( x=300, y=-200, color= pilas.colores.blanco)
def iniciar_juego():
    a=pilas.escenas.Normal()
    fondo = pilas.fondos.Fondo()
    fondo.imagen = pilas.imagenes.cargar( 'fondo13.jpg')
    
    
    actor = pilas.actores.Torreta()
    disparo_misil = pilasengine.actores.Misil
    actor.aprender("disparar",angulo_salida_disparo=90,municion=disparo_misil)
    actor2 = pilas.actores.Mapa()    
    palta=pilas.actores.Aceituna()*10
    
    canasta=pilas.actores.Ovni()
    canasta.y=-200
    canasta.x = [0, 30, 300] *1000, 3
    
    
    palta.imagen="palta3.png"
    #palta.aprender("PuedeExplotarConHumo")
    palta.escala=0.1

   
    actor2.imagen="arbol.png"  
    actor2.x=220
    actor2.y=-50
    #actor.imagen="a.jpg"
    actor.x=-300
    actor.y=-200
    #actor.aprender("disparar", municion="bala")
    arbol = pilas.actores.Globo("disparame ")
      


def ayuda_juego():
    
    pilas.escenas.Normal()
    texto = pilas.actores.Texto("Nivel 1 .- tenemos que disparar alas paltas apra poder recojeralas ")
    boton= pilas.interfaz.Boton("JUGAR")
    boton.x=280
    boton.y=-200
    boton.conectar(iniciar_juego)
  


    
def salir_del_juego():
   pilas.terminar()	



menu=pilas.actores.Menu(
        [
            ('iniciar juego', iniciar_juego),
            ('ayuda juego',ayuda_juego),
            ('salir', salir_del_juego),
        ])

pilas.ejecutar()
import pilasengine

pilas = pilasengine.iniciar()

def iniciar_juego():
	
	def matar(misil, enemigo):
		enemigo.eliminar()
		puntos.aumentar()

	a=pilas.escenas.Normal()
	fondo = pilas.fondos.Tarde()
	###fondo.imagen = pilas.imagenes.cargar( 'fondo13.jpg')
	puntos = pilas.actores.Puntaje( x=300, y=-200, color= pilas.colores.blanco)
    
    ###fondo = pilas.fondos.Fondo()
    ###fondo.imagen = pilas.imagenes.cargar( 'fondo13.jpg')
    
	actorTorreta = pilas.actores.Actor()
	actorTorreta.imagen = "torreta.png"
	###actorTorreta.imagen="a.jpg"
	actorTorreta.x=-300
	actorTorreta.y=-200
	actorTorreta.aprender("dispararConClick", angulo_salida_disparo=90,frecuencia_de_disparo=1, municion="Misil")
	actorTorreta.aprender("rotarconmouse")
    
	actor2 = pilas.actores.Mapa()
	###actor2.imagen="arbol.png"  
	actor2.x=220
	actor2.y=-50
    
    
	canasta=pilas.actores.Ovni()
	canasta.y=-200
	canasta.x = [0, 30, 300] *1000, 3
    
	palta=pilas.actores.Aceituna()*10
    ###palta.imagen="palta3.png"
    #palta.aprender("PuedeExplotarConHumo")
	palta.escala=0.3
    
	arbol = pilas.actores.Globo("disparame ")
    
	pilas.colisiones.agregar("Misil","Aceituna", matar)
    
	

def ayuda_juego():
    
    pilas.escenas.Normal()
    texto = pilas.actores.Texto("Nivel 1 .- tenemos que disparar alas paltas apra poder recojeralas ")
    boton= pilas.interfaz.Boton("JUGAR")
    boton.x=280
    boton.y=-200
    boton.conectar(iniciar_juego)
  


    
def salir_del_juego():
   pilas.terminar()	

def menu():
	menu=pilas.actores.Menu(
        [
            ('iniciar juego', iniciar_juego),
            ('ayuda juego',ayuda_juego),
            ('salir', salir_del_juego)
        ])

menu()
pilas.ejecutar()

Buenas, @jos

Ahí te hice unos cambios. bastantes comentarios a hacerte, pero te los hago mañana pq hoy ya es muy tarde, de momento revisa este código, ok?
Un saludo!

gracias :slight_smile:

De nada! :slight_smile:

Comentarios:

  • El problema principal era que estabas intentando asignar una munición al actor “torreta”. Parece ser que a este actor no se le puede asignar una munición que no sea la que lleva programada de clase. No sé si @hugoruscitti podría solucionar eso en un futuro… :sweat:

  • Tambien estabas intentando asignar como munición un actor instanciado, lo cual siempre te va a dar problemas[quote=“jos, post:1, topic:1420”]
    disparo_misil = pilasengine.actores.Misil
    actor.aprender(“disparar”,angulo_salida_disparo=90,municion=disparo_misil)
    [/quote]

  • Al final, como puedes ver, he creado un actor que tiene la imagen de una torreta, se mueve como una torreta y dispara como una torreta, pero no es una torreta :smile:

  • En lo posible, intenta no dar el nombre “actor” a un actor, no tiene por que dar problemas, pero es mejor evitar confusiones…

  • Fíjate en la colisión programada, y que esta colisión llama a una def “anidada” dentro de la def inicia_juego. Esto es porque al no estar tu juego programado en escenas es la manera más práctica de hacerlo.

  • Tambien te he puesto el menú dentro de una def separada y a la que se llama nada más empezar el juego.

  • Al revisar tu código he estado copiando y pegando de aquí para allí, y es posible que te dé algún problema de indexación. Puedes usar la opción en tu editor de eliminar todos los espacios, o en un caso extremo puedes reescribir el programa, que no es muy largo. :sweat_smile:

Y por último un pequeño consejo si me lo permites… Intenta siempre adaptarte a las “buenas prácticas” y ser ordenado en tu código. Es buena costumbre que todos los atributos y definiciones de un mismo actor esten juntas y ordenadas, más que nada por que si el código es muy largo te va a costar mucho encontrar en qué punto le cambiaste uno u otro atributo (y es mucho más fácil de entender para una persona que revisa tu código).

Espero que disfrutes mucho con Pilas-Engine y que sigas haciendo buenos juegos !

Un saludo :wink:

Buenas!
Haciendo pruebas con el actor torreta he visto que se le puede pasar la munición a disparar al instanciarlo:

mi_torreta=pilas.actores.Torreta(“Misil”)

Lo que no se puede es pasarle la munición con el “aprender disparar” pero si con el “aprender dispararConClick” :smile:

Entonces en vez de este código

actorTorreta = pilas.actores.Actor()
	actorTorreta.imagen = "torreta.png"
	###actorTorreta.imagen="a.jpg"
	actorTorreta.x=-300
	actorTorreta.y=-200
	actorTorreta.aprender("dispararConClick", angulo_salida_disparo=90,frecuencia_de_disparo=1, municion="Misil")
	actorTorreta.aprender("rotarconmouse")

Puedes usar este otro más sencillo:

actorTorreta = pilas.actores.Torreta("Misil")
	###actorTorreta.imagen="a.jpg"
	actorTorreta.x=-300
	actorTorreta.y=-200
	actorTorreta.aprender("dispararConClick", angulo_salida_disparo=90,frecuencia_de_disparo=1, municion="Misil")

Un saludo! :wink: