Detener la funcion "cada"

Hola a todos!!! estoy de nuevo :wink: aunque todavía tengo la tostadora estoy utilizando pilas on-line que es mucho mas rápido que la versión de escritorio :slight_smile: bueno tengo una pregunta. La función “cada” tiene alguna manera de detenerlo?? y si no es así estaría bueno que pudieran agregar un tercer parámetro opcional que diga cuantas veces quiero que se repita cierta acción, un saludo a todos y éxito!

pd: AAH!! estoy haciendo un juego al estilo “Tower Defence” y por ahora me esta yendo bien, ya pronto voy a subir un avance :wink:

Hola @PabloSosa, te comento una forma de hacer que la función “cada_segundo” se pueda ejecutar un par de veces y luego detenerla.

Lo que podrías hacer es crear una variable tipo “contador”, que comience en “0” y luego, en el método “cada_segundo” podrías incrementar esa variable y con una sentencia de control tipo “IF” para decidir si ejecutas código o no.

class texto extends ActorTextoBase {
    contador = 0;

    cada_segundo() {
        this.contador++;

        if (this.contador < 10) {
            this.texto = `El contador vale ${this.contador}`;
        } else {
            this.texto = "Listo!, el contador llegó a 10"
        }

    }
}

Te paso un ejemplo más completo de esto: hice un pequeño ejemplo en donde se muestra un texto que va contando hasta diez. Y una vez que llega a 10 se detiene (*)

image

image

https://app.pilas-engine.com.ar/#/proyecto/e3b54cdd-445f-40ab-80d9-61698070f81d

(*) En realidad no es que se detiene, sino que deja de actualizar el texto y parece no volver a ejecutarse.

aah genial @hugoruscitti, te hago otra consulta ese “cada segundo” se puede llamar en cierta acción?? porque no quiero que lo haga al principio si no cada vez que un actor haga cierta acción se repita un método una cierta cantidad de veces. Y ya que estamos te hago otra pregunta, hay manera de hacer una corrutina?? y la ultima. Como van con la nueva vercion? espero que estén yendo muy bien la espero con ansias :smiley: ,gracias amigazo, un abrazo.

Hola esto lo digo como mejora del Engine,para crear cosas cada cierto tiempo en Godot Engine existe un NODO LLAMADO TIMER…Este nodo tiene la particularidad que al terminar el tiempo lanza una señal que podes usarla para lo que vos queieras…Tambien tiene la posibilidad de reproducirse 1 ves o repetirse…SIno tenes que usar el metodo de unity tomando el tiempo,guardando en una variable y y hacer comparaciones…AL final te das cuenta que el nodo Timer de GOdot es una maravilla ahorra muchos dolores de cabeza,para disparos,instanciar enemigos,aumentar dificultad,el nodo timer es una maravilla…Dejo un link por si a hugo le interesa conocer como funciona esta herramienta…
https://docs.godotengine.org/en/3.1/classes/class_timer.html

Sí, lo que podrías hacer es usar la función “luego” o “cada”:

http://manual-pilas-engine.surge.sh/tiempo.html

Por ejemplo, si quieres que un actor se mueva 50 pixeles a la derecha 2 segundos después de que hacen click sobre él podrías escribir algo así:

class caja extends Actor {
    iniciar() {}

    cuando_hace_click() {
        this.decir("Espero 2 segundos ...")
        this.pilas.luego(2, () => {
            this.x += 50;
            this.decir("listo!")
        })
    }
}

screencast%202019-11-19%2012-42-15

PD: @kone9, gracias por dato de godot, voy a investigarlo a ver si puedo mejorar un poco los temporizadores de pilas.

1 me gusta

Genial! gracias hugo un saludo, segui asi amigo