Función "luego" al implementar sonidos de inicio al nivel

No sé si está desactualizada la documentación o falta algo, o yo soy algo tonto, pero ando teniendo problemas, como ya habrán leído, con la función “luego”. Por alguna razón, no logro hacer que los sonidos de inicio se turnen durante el gameplay, sino que salen todos juntos (El “Three, Two, One, Go!” de FNF). (Y también como otro problema a parte, que por alguna razón una inst que quise poner (La de Overhead) no se reproduce.)

pilasengine.luego(1, (pilasengine.reproducir_musica("intro1")))
    pilasengine.detener_musica
    countdown += 1
    if (countdown == 1) {
      pilasengine.luego(2, (pilasengine.reproducir_musica("intro2")))
      pilasengine.detener_musica
      countdown += 1
    }
    if (countdown == 2) {
      pilasengine.luego(3, (pilasengine.reproducir_musica("intro3")))
      pilasengine.detener_musica
      start = true
    }
    if (start == true) {
      pilasengine.reproducir_musica("inst")

(Todo eso por el momento lo dejé en un comentario de varias líneas, solo por si acaso).

Intenté con este, y otras formas (Cambiando el “pilasengine” por “this.pilas” o “this.reproducir_musica”, con el “this.reproducir_sonido” que me había funcionado antes para el menú, con “pilasengine.reproducir_sonido” y así consecutivamente). También simplemente usando el luego varias veces…

pilasengine.luego(1, () => { this.reproducir_musica("intro1"), pilasengine.detener_musica })
pilasengine.luego(2, () => { this.reproducir_musica("intro2"), pilasengine.detener_musica })
pilasengine.luego(3, () => { this.reproducir_musica("intro3"), pilasengine.detener_musica })

…, pero nada. Hago este hilo principalmente para ver si puedo conseguir una respuesta directa, algo más enfocado a mis tontos problemas jej)

No sé si debería mejor usar el “cada” y copiar uno de los ejemplos de la documentación, pero no lo veía útil para mi problema.

hola! @justrandom recuerda que el codigo es:

pilas.luego(cantidad_de_segundos_a_esperar, función)

o tambien puedes usar:

pilas.cada(segundos_para_el_intervalo, función, veces_a_repetir: opcional)

recuerda que se hace un llamado pilas.luego/cada y no pilasengine
espero que tu problema se solucione, escribeme si necesitas ayuda.

Hola @justrandom. Te comparto el código que haría sonar 3 sonidos con un intervalo de 1 segundo entre ellos.

cada_segundo(segundos: number) {
    if (segundos == 1) {
      this.reproducir_sonido("laser");
    }
    if (segundos == 2) {
      this.reproducir_sonido("comer");
    }
    if (segundos == 3) {
      this.reproducir_sonido("moneda");
    }
  }

Este código es para la versión online de Pilas que funciona con javascript, creo que estas utilizando la versión de pyton. Pero debería ser similar.
En cuanto a porqué tu código no funciona. La razón es que todo se ejecuta al mismo tiempo. Le estas diciendo a pilas que:

  • Espere un segundo y luego reproduzca el sonido intro1, detenga la música y sume 1 a la variable countdown. Suponiendo que la variable haya comenzado en cero, entonces ahora tendría el valor de 1.
  • Si la variable tiene el valor de 1, entonces reproduce el sonido intro2 y, al mismo tiempo, detiene la música. Como la variable sí tiene le valor de 1, todo este condicional se ejecuta. Lo mismo sucede con el resto.

Recuerda que Pilas ejecuta todos los códigos una vez por cada fotograma, lo cual es imperceptible para nosostros. Aunque la ejecución siempre se hace en orden de arriba hacia abajo, la velocidad es tal que, a nuestros ojos, ocurre todo a la vez.
El segundo método que mencionaste, utilizando varias funciones luego, tiene un error similar. Reproduces música, pero a la vez la detienes. Esto hace que no se escuche nada. Puedes quitar la parte detener_musica y reemplazar reproducir_musica por reproducir_sonido. Pero la funciones luego y esperar tinenen algunos bugs, por lo tanto recomiendo evitar su uso.

Yo intenté eso porque fué lo que me funcionó para el menú extrañamente, el efecto de selección del menú funcionó perfecto reproduciéndolo como música y deteniéndolo. Pero supongo que no iba a ser tan sencillo, jej.

ya había usado ese, por eso lo añadí en el problema jej