Tutorial de Scrolling no me toma los botones de izquierda y derecha

Hola q tal tengo un problema estoy pasando el tutorial de Scrolling a la nueva versión.
Link de scrolling : Pilas Engine
usando las actualizaciones de versión (Pilas Engine).

Mi problema es q no me toma los botones de izquierda y derecha.
No se q le falta al código o si declare algo mal o lo estoy llamando mal
Las fotos para poder ejecutarlo están en :descargar recursos adicionales del link
Link de scrolling : Pilas Engine

El objetivo es modificar el código lo menos posible (para q las personas q tengan juegos hechos en versiones anteriores 1.0 puedan usar sus juegos con la nueva sin grandes modificaciones)
Gracias
les paso el código

import pilasengine
pilas = pilasengine.iniciar(ancho=500, alto=500)
# Definimos las teclas que moverán al personaje
teclas = {
            pilas.simbolos.IZQUIERDA: 'izquierda',
            pilas.simbolos.DERECHA: 'derecha'
            
        }
# Creamos un control personalizado con esas teclas
mandos = pilas.control.Control(teclas)

class Bicho (pilasengine.actores.Actor):

    def iniciar(self):
        self.imagen = pilas.imagenes.cargar("renata.png")
       
        self.hacer("EsperandoT")
   
# Agrega a pilas el actor q cree en este caso Bicho 
pilas.actores.vincular(Bicho)

class EsperandoT(pilasengine.comportamientos.Comportamiento):
#Actor en posicion normal o esperando a que el usuario pulse alguna tecla
    def iniciar(self, receptor):
        self.receptor = receptor
    def actualizar(self):
        if mandos.izquierda or mandos.derecha:
            texto = pilas.actores.Texto("Hola, este es mi primer texto.")
            self.receptor.hacer("Saltando")
        else:
            # Con retornar True le indicamos a pilas que este
            # comportamiento terminó y tiene que pasar al siguiente.
            return True
# Agrega a pilas el comportamiento q cree en este caso EsperandoT
pilas.comportamientos.vincular(EsperandoT)       
   
class Saltando(pilasengine.comportamientos.Comportamiento):
#Actor Saltando
    def iniciar(self, receptor):
        self.receptor = receptor
        self.origen = self.receptor.y
        self.dy = 10
        if mandos.izquierda:
            self.dx = -4
        elif mandos.derecha:
            self.dx = 4
    def actualizar(self):
        self.receptor.y += self.dy
        self.receptor.x += self.dx
        self.dy -= 0.2
        if abs(self.receptor.x) > 180:
           self.dx = -self.dx
        if self.receptor.y < self.origen:
           self.receptor.y = self.origen
           self.receptor.hacer("EsperandoT")
        #else:
            # Con retornar True le indicamos a pilas que este
            # comportamiento terminó y tiene que pasar al siguiente.
         #   return True
# Agrega a pilas el comportamiento q cree en este caso Saltando
pilas.comportamientos.vincular(Saltando)
# Creación de paredes
paredes1 = pilas.actores.Actor(imagen="arbustos.png",y=0)
paredes2 = pilas.actores.Actor(imagen="ladrillos.png", y=1000)
paredes3 = pilas.actores.Actor(imagen="maderas.png" , y=2000)
# Creación del fondo fijo
nubes=pilas.fondos.DesplazamientoHorizontal()
nubes.agregar("nubes.jpg", 0, 0, 0)
# Creación del protagonista
renata =Bicho(pilas)
#Para e el protagonista quede en la pantalla,por mas q se mueva la camara
renata.fijo=True

#le enseño a renata la habilidad de moverse con el teclado
#renata.aprender(pilas.habilidades.MoverseConElTeclado, control=mandos)
#Encadenando del comportamiento EsperandoT con renata
renata.hacer("EsperandoT")

# Activación del movimiento de la cámara
pilas.escena_actual().camara.y = [2250], 20
pilas.ejecutar()

Buenas, @JuanF !

Sin duda es de agradecer que te tomes el tiempo y la molestia de adaptar este tutorial :smile:

Veo que has anulado esta linea, que es en la cual renata aprende a usar los mandos… Ha sido a proposito?

#renata.aprender(pilas.habilidades.MoverseConElTeclado, control=mandos)

Seguramente tu ya habras comprobado que si la activas renata SI se mueve a izquierda y derecha (aunque no realiza el salto).

No sé si era esto lo que preguntabas, o si es por que no realiza el salto…

Si era lo segundo (lo del salto) quizas @hugoruscitti pueda ayudarte mejor que yo…

Un saludo y de nuevo muchas gracias por tu interés y tu esfuerzo :wink:

Hola jordinur muchísimas gracias por responder y tu ayuda y apoyo, si a esa línea la anule a propósito xq mi objetivo es q la clase bicho aprenda a moverse usando la función (self.hacer(“EsperandoT”)) de la clase EsperandoT. Es para hacerlo mas genérico al código y q permite el encadenamiento de clases(q una clase llame a la otra y esta a la otra ,así al parecer era en el código original).
Pero me falta algo no se si esta algo mal declarado o las llamadas las hago mal, si ya voy a ver si le consulto a @hugoruscitti.
Muchicimas gracias por ayuda y consejo jordinur

Buenas, @JuanF !

Seguro que el enlazar comportamientos es una buena manera de hacerlo, pero yo que soy más vago prefiero incluir los comportamientos del actor en su misma clase. También me parece que es una manera clara de exponer qué hace en cada momento y el por que lo hace. Si fuera un actor animado, quizás si vería más justificado el programar comportamientos, pero al no ser este el caso yo optaría por unos métodos más sencillos.

Sin duda si Hugo lo hizo así en su dia será por un muy buen motivo, y yo no soy nadie para rebatirlo… :blush:

Aún así, yo optaria por algo así

import pilasengine
pilas = pilasengine.iniciar(ancho=500, alto=500)


class Bicho (pilasengine.actores.Actor):
	def iniciar(self):
		self.imagen = ('renata.png')
	
	def saltando(self, tecla):
		if tecla.codigo == 1:
			print('tecla izquierda')
			self.salto('izquierda')
		elif tecla.codigo == 2:
			print('tecla derecha')
			self.salto('derecha')
		else:
			pass
			
		
	def salto(self, direccion):
		if direccion == 'izquierda':
			print('salta a izquierda')
			self.x -= 4
		
		elif direccion == 'derecha':
			print('salta a derecha')
			self.x += 4
				
pilas.actores.vincular(Bicho)

renata = pilas.actores.Bicho() 

pilas.eventos.pulsa_tecla.conectar(renata.saltando)

pilas.ejecutar() 

Ya sé que es un ejemplo demasiado básico, y que te dejo a ti todo el trabajo de montar la def actualizar del actor :smile:

Disculpa si te desvio de tu camino proponiendote una solución alternativa en vez de responder tu pregunta, quizás Hugo pueda darte mejor solución !

Recibe un abrazo y de nuevo muchas gracias por tu interés y tu tiempo. :wink:

Muchas gracias Jordinur tu respuesta me ayudo mucho (y no me desvías de mi camino),yo también había hecho un análisis similar pensamos parecido ,lo q voy a hacer es mandarle el miércoles o el jueves a Hugo las dos opciones del tutorial,y así el me dice q camino tomar o el q le gusta mas con el tutorial.
Por cierto probé tu código y me funciono de 10, veremos como sigo según lo q me diga Hugo.
Muchísimas Gracias Jordinur por tu ayuda y opinión (perdón por tardar en responder pero me anda mal el internet)
Te Mando un Abrazo