Error al eliminar Menu dentro de un class [RESUELTO]

Hola, tengo un problema al intentar eliminar un menu, si alguien puede encontrar la falla o que esta mal hecho me ayudaria :smiley:, el supuesto error es que “pausa” no esta definido :frowning:

import pilasengine

pilas = pilasengine.iniciar()

def reanudar():
    pausa.eliminar()
        
class EscenaJuego(pilasengine.escenas.Escena):
    def iniciar(self):
        self.fondo = pilas.fondos.Galaxia()
        mono = pilas.actores.Mono()
        mono.y = 200
        pilas.eventos.pulsa_tecla.conectar(self.al_pulsar_tecla)	
    def al_pulsar_tecla(self, tecla):
        if tecla.codigo=="p":
            pausa=pilas.actores.Menu([
            ('Reanudar', reanudar),
        ])
        
pilas.escenas.vincular(EscenaJuego)	
pilas.escenas.EscenaJuego()
pilas.ejecutar()

Saludos!

Buenas, @Pan!

Es normal que no reconociera “pausa”, ya que tenías esa def fuera de la escena. Es todo ese tema tan “rollo” del ámbito de las variables y las funciones que tanto nos cuesta entender cuando empezamos a estudiar un lenguaje de programación.

Cuando se pasa de programación procedimental a otra orientada a objetos (usando “class”) hay que mirar con cuidado cuando hacemos referencia a un objeto propio de la clase y cuando es externo. En este caso la escena es una “class”, y por tanto tiene sus métodos y definiciones propios.

Fíjate en todos los “self” que he añadido… son necesarios para hacer referencia correctamente a funciones internas de la class EscenaJuego.

Ahora ya funciona correctamente. :slight_smile:

# coding: utf-8
import pilasengine

pilas = pilasengine.iniciar()
        
class EscenaJuego(pilasengine.escenas.Escena):
    def iniciar(self):
        self.fondo = pilas.fondos.Galaxia()
        self.mono = pilas.actores.Mono()
        self.mono.y = 200
        pilas.eventos.pulsa_tecla.conectar(self.al_pulsar_tecla)
        
    def reanudar(self):
        self.pausa.eliminar()
    	
    def al_pulsar_tecla(self, tecla):
        if tecla.codigo=="p":
            self.pausa=pilas.actores.Menu([
            ('Reanudar', self.reanudar),
        ])
        
pilas.escenas.vincular(EscenaJuego)	
pilas.escenas.EscenaJuego()

pilas.ejecutar()

Un saludo! :wink:

1 Like