PERO COMO SE HACE?!?!?!?!?!
he probado el new audio sistem y el viejo y no hay manera!! cómo puedo saber el volument de una musica específica?? ya sea con el audio antiguo o con el nuevo (prefiero el antiguo, que me ha costado cambiarlos todos xD)
lo que quiero es que una musica vaya bajando poco a poco su volumen y cuando el volumen esté a 0 entonces cambio la música (para un tipico cambio de música en el boss)
PD: el audio_master_gain no lo entiendo, ni siquiera sé lo que es un listener, supongo que un canal o algo así, pero no entiendo nada :S solo encuentro comandos para cambiar el volumen (que no funcionan) pero ninguno para saber cuál es el volumen actual, me voy a volver loco!! (sry estoy estresao hoy xD)
Hola kostra,
Has probado la función sound_volume?
Aquí tienes la referencia https://docs.yoyogames.com/source/dadiospice/002_reference/game%20assets/sounds/legacy%20sound/sound_volume.html (https://docs.yoyogames.com/source/dadiospice/002_reference/game%20assets/sounds/legacy%20sound/sound_volume.html)
Un saludo!
Si la he probado, y no funca, he creado una variable aparte a 1 y en un bucle le voy incrementando 0.1 a la vez que le asigno con sound_volume el valor fe tal variable y al final un if variableparaelvolumen <= 0 cambia la musica.
Pero pum, se baja de golpe
Lo bajas quitando 0.1? Eso es mucho si lo haces por ejemplo en un evento STEP, ya queen solo 10 steps la bajas a 0. En que evento bajas la musica? Puedes poner el codigo?
Gracias por corregirme ese detalle, ahora no estoy en el pc, voy a comer algo y dentro de una hora o poco mas digo como me va, para no hacer doble post ni editar para que nadie lo vea, puedes plis comentarme cuanto me aconsejas ponerle?
EDITO: No tenia 0.1 se me olvidó que probé también con 0.001 y ahora acabo de probar 0.0001 y tampoco me funca... este es el código:
[gml]for (vol=1;vol>0;vol-=0.0001) {
sound_volume(mlvl1,vol);
if vol == 0
alarm[0] = 1;
}[/gml]
está en un evento colisión el cual al cumplirse todo se destruye para evitar bucles infinitos, es un típico activador invisible
Eso no deberías hacerlo en bucle, ya que como has dicho en el for, se repetirá mientras que el valor 'vol' sea mayor a 0. Por lo que el usuario ve que el volumen se baja al instante.
Quita el for, y simplemente pon en el mismo evento:
vol -= 0.001;
sound_volume(mlvl1,vol);
if (vol <= 0) {
//Destruir al instante, ya que si se repite esto, la alarma no podrá cumplirse nunca.
}
Cabe destacar que el player inevitablemente pasa de largo (está encima de un boost, así que la colisión no es constante
Puedes crear una variables que sea chocado = false.
Puedes hacer que cuando colisione, la variable se vuelva true, y entonces un sistema esté esperando a que se vuelva true para bajar el volumen.
if (chocado) {
//Código de antes
}
LISTO!! lo que me diste no funcionaba puesto a que se ejecutaba una sola vez, por no colisionar, así que por mucho que esté "chocado en true", si no colisionas no se lee xD, así que añadí un step y así quedó todo:
create:
[gml]///vars
ok = 0;
vol = 1;[/gml]
colision:
[gml]///activar boss
oboss1intro.alarm[0] = 1; //ni caso a esto
with oactivadorboss1 //es este mismo objeto, para cuando el camino es más ancho y necesito más de una instancia...
ok = 1;[/gml]
step:
[gml]///bajar volumen
if ok == 1 {
vol -= 0.005;
sound_volume(mlvl1,vol);
if (vol <= 0) {
with oactivadorboss1
ok = 2;
alarm[0] = 1;
}
}[/gml]
alarm0:
[gml]///activar mboss y destruirse
sound_stop_all();
sound_loop(mboss);
with oactivadorboss1
instance_destroy();[/gml]
GRACIAS GRACIAS GRACIAS GRACIAS GRACIAS !!!