Duda con eventos

muy buenas.

tengo una duda que no puedo resolver.

es con eventos.pulsa_tecla

la idea es que quiero que un bloque se ejecute hasta que deje de pulsar la tecla,
o que ejecute el comando por un tiempo y que después siga con el actualiza

el problema puntual es que quiero golpear pero actualizar me pisa la ejecución de golpear() por estaQuieto()
(golpear ejecuta una animación)

Hola @Miguel_Miloro !

Lo más sencillo que se me ocurre es tener dos funciones conectadas a los eventos “pulsa_tecla” y “suelta_tecla”. De esa forma vas a tener control sobre los dos instantes más importantes para que tu personaje realice el golpe o pase a estar en reposo.

Para ilustrar esto, armé un ejemplo muy básico: Básicamente es un actor que hace lo siguiente, cuando se pulsa una tecla comienza a moverse a la izquierda y girar. Cuando se suelta la tecla vuelve a quedar en reposo.

Tené en cuenta que las funciones “cuando_pulsa_tecla” y “cuando_suelta_tecla” se va a ejecutar una vez, dependiendo de lo que haga el usuario. Estas funciones son ideales para comenzar una animación, reproducir sonidos o cualquier cosa que quieras que se haga una sola vez. En cambio, la función “actualizar” se ejecutará todo el tiempo, 60 veces por segundo, así que ahí lo ideal es realizar cosas incrementales como movimientos o chequeos rápidos:

# coding: utf-8
import pilasengine

pilas = pilasengine.iniciar()

class MiActor(pilasengine.actores.Actor):
    
    def iniciar(self):
        self.imagen = "aceituna.png"
        self.pilas.eventos.pulsa_tecla.conectar(self.cuando_pulsa_tecla)
        self.pilas.eventos.suelta_tecla.conectar(self.cuando_suelta_tecla)
        self.mantiene_tecla_pulsada = False
        
    def cuando_pulsa_tecla(self, tecla):
        self.mantiene_tecla_pulsada = True
        self.pilas.avisar('Ha pulsado la tecla')

    def cuando_suelta_tecla(self, tecla):
        self.mantiene_tecla_pulsada = False
        self.pilas.avisar("ha soltado la tecla")
        
    def actualizar(self):
        if self.mantiene_tecla_pulsada:
            self.x -= 5
            self.rotacion += 5
        else:
            pass



pilas.actores.vincular(MiActor)
pilas.actores.MiActor()

pilas.ejecutar()

Avisanos cualquier cosa.

Saludos!

Muchas gracias!!! , voy a intentar aplicarlo ya