Ayuda para crear menu

Hola, buenos dias. estuve revisando todos los proyectos de pilas que cuentan con escenas y menús e intentando acoplarlos al mio, pero no hubo caso. :sob:

Se me esta complicando y cada vez estoy mas enredado, les dejo mi codigo y pido porfavor que alguien me cree la base de un menu simple, pero funcional. Al que luego lo modificare a mi gusto, agregando imagenes,estilos,etc.

Link: https://drive.google.com/drive/folders/0B1FxyZkqmi_dTkNNVVhqb0VTWWM?usp=sharing

Desde ya muchas gracias, seguire intentando, pero su ayuda sera muy util.

Matsimus :champagne:

Buenas @MatsimusTrolling

Ya vi tu mensaje por youtube.

Más que una solución te voy a dar unas orientaciones, por que creo que ya vas a saber resolverlo tú solo.

Lo primero, a mi el mapa tiled se me ha abierto sin ningún problema, sin necesidad de hacer nada.

Te voy a pedir que mires el ejemplo “juego con escenas”.

Fíjate que hay como mínimo DOS ESCENAS. Una escena para el inicio, que es donde deberias poner el actor MENÚ.

Otra escena donde está el juego. TODO el código de tu main.py, desde

EscenaJuego(pilasengine.escenas.Escena):
     self.mapa_desde_archivo = pilas.actores.MapaTiled("fondo.tmx")

     hasta

     self.iniciar_juego()

debe ir en esa segunda escena.

Después debes VINCULAR las 2 escenas, y llamar a la escena donde está el MENÚ. Desde la escena del menú llamarás a la escena del juego, al seleccionar la opción que tu hayas programado.

por ejemplo:

		pilas.colisiones.agregar(pelota, arco1, gol2)
		pilas.colisiones.agregar(pelota, arco2, gol)


	self.iniciar_juego()
	
pilas.escenas.vincular(EscenaMenu) #vinculamos las 2 escenas
pilas.escenas.vincular(EscenaJuego)

pilas.escenas.EscenaMenu() #Esta linea llama a la escena del menu

pilas.ejecutar()

Tienes varios ejemplos en el foro de creación de un actor menú. Seguro que si buscas un poco lo vas a encontrar.

Si aún así no consigues resolverlo, vuelve a preguntar, ok?

Un abrazo.

Buenas jordi, lo del mensaje fue mi compañero, pero no hay drama.

Lo que me acabas de comunicar ya la habia probado, por eso recurri al foro :wink:.
Busque como 3 formas de hacerlo y ninguna dio frutos.

Pero segui intentando, y sigo sin lograrlo, te paso el link del archivo con “todo listo” como me gustaria que este, para que lo leeas y me digas cual es el error y yo lo corrigo.

Porfavor no te tomes el trabajo de corregirlo tu mismo, no quiero molestarte.

Matsimus

Buenas, @MatsimusTrolling !

Ya casi lo tienes, te falta el último esfuerzo… Hay unas pocas cosas…

Lo primero, disculpa que te escribiera mal el código, ya quie eso te ha confundido. Hay que escribir class delante de la escena, ya que estamos creando una clase.

class EscenaMenu(pilasengine.escenas.Escena):

Lo segundo, tampoco te fije que la escena debia tener una def INICIAR

 class EscenaMenu(pilasengine.escenas.Escena):
     def iniciar(self):
          self.fondo='el_fondo_que_quieras.png'

En esa def iniciar debes poner todo lo que saldrá en la escena, el fondo, los actores, etc.

Las class de los actores es mejor que esten fuera de las escenas

class mazaroja(pilas.actores.Actor):
     def iniciar(self):
             self.imagen('mazaroja.png')

class EscenaJuego(pilasengine.Escenas.Escena):
     def iniciar(self):
           self.fondo=('mi_fondo.png')
           self.maza1 = pilas.actores.mazaroja()

pilas.actores.vincular(mazaroja)

pilas.escenas.vincular(EscenaJuego)

pilas.escenas(EscenaJuego)

pilas.ejecutar()

Quizás se hace un poco difícil de entender, pero una coas es la CREACION de una clase de actor (una class), que es el código propio del actor, y otra cosa cuando lo INICIALIZAMOS en una escena con una variable miactor=pilas.actores.Miactor()

En el primer caso, el actor es sólo un objeto teórico, ya que existe pero no está representado en pantalla. En el segundo caso cogemos ese objeto y le decimos que aparezca en pantalla, en nuestra escena.

Espero haberme explicado correctamente, y de nuevo disculpa por no escribirte bien el ejemplo anterior. :blush:

Un ejemplo de tu código…

pilas.habilidades.vincular(MoverFiguraConTeclado)
	
class EscenaJuego(pilasengine.escenas.Escena):
    
    def iniciar(self):
		self.mapa_desde_archivo = pilas.actores.MapaTiled("fondo.tmx")	
		#PUNTAJES
		self.puntaje = pilas.actores.Puntaje(color='azul')
		self.puntaje.x = 270
		self.puntaje.y = -390
		self.puntaje.escala = 2

		self.puntaje2 = pilas.actores.Puntaje(color='rojo')
		self.puntaje2.x = 270
		self.puntaje2.y = 390
		self.puntaje2.escala = 2
	        self.iniciar_juego
    def iniciar_juego(self):
		#MASAS
		self.masaroja = MasaRoja(pilas)
		self.masaazul = MasaAzul(pilas)

Ahh me parecia que faltaba algo antes de EscenaJuego y EscenaMenu.

Estoy muy cerca de lograrlo, gracias a que me aclaras las cosas y lo voy entendiendo.
Pero disculpame, de nuevo, corregi el codigo y sigo con otro problema. La escena menu anda correctamente, al hacer click entro en la siguiente(EscenaJuego) y me dice que:

Tambien probando otras formas, el iniciar_juego() no corria y solo se quedaba en el iniciar(), estoy hablando dentro del EscenaJuego().

Link: https://drive.google.com/drive/folders/0B0mO1yQ1hbKaSXFlWV9RZW1SRXM?usp=sharing

Buenas, @MatsimusTrolling

Ya sé que me dijiste que no corrigiera pero al final me aburría en casa y me puse a hacerlo…

Yo sí he podido crear correctamente las escenas. Ese error que te da seguramente es por que no vinculaste correctamente la EscenaJuego.

pilas.actores.vincular(MasaAzul)
pilas.actores.vincular(MasaRoja)

pilas.escenas.vincular(EscenaMenu)
pilas.escenas.vincular(EscenaJuego)

pilas.escenas.EscenaMenu()

pilas.ejecutar()

Me sabe mal decirte que cuando las hayas creado y vinculado, el juego se va a iniciar correctamente, pero las masas no van a reconocer los controles que creaste, y no se van a mover. Al menos eso fué lo que me pasó a mi :smile:

Si te pasa eso dímelo y te oriento, por que yo ya tengo tu juego completamente funcional.

Un abrazo.

class EscenaJuego(pilasengine.escenas.Escena):
    
    def iniciar(self):

		self.mi_control_1 = pilas.control.Control(teclas)
		self.mi_control_2 = pilas.control.Control(teclas2)
		
		self.mapa_desde_archivo = pilas.actores.MapaTiled("fondo.tmx")	
		#PUNTAJES
		self.puntaje = pilas.actores.Puntaje(color='azul')
		self.puntaje.x = 270
		self.puntaje.y = -390
		self.puntaje.escala = 2

		self.puntaje2 = pilas.actores.Puntaje(color='rojo')
		self.puntaje2.x = 270
		self.puntaje2.y = 390
		self.puntaje2.escala = 2
		
		self.iniciar_juego()
		
    def iniciar_juego(self):

		#MASAS
		self.masaroja = pilas.actores.MasaRoja()
		self.masaazul = pilas.actores.MasaAzul()
		self.masaroja.aprender("MoverFiguraConTeclado", self.mi_control_1)
		self.masaazul.aprender('MoverFiguraConTeclado', self.mi_control_2)
		
		#PELOTA
		self.pelota = pilas.actores.Pelota()

Ahí te va otra pista :wink:

Gracias, me parece que ya se por donde quieres ir, ahora le voy a meter mano y a seguir, hasta mas no poder.

Muchas gracias