Noticias

Importante: ¡Si quieres publicar tu juego no olvides leer este tema!

Comunidad Game Maker

Bienvenid@ a la comunidad hispana de Game Maker. Nuestro objetivo es crear videojuegos y dar soporte en castellano de GM. Para mejorar nuestro servicio hemos implantado, como adicion al reglamento general, algunas normas especificas en los subforos más comunes. ¡No olvides informarte antes de participar!.

Autor Tema: Duda con los audio emitters  (Leído 510 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Marth

en: Noviembre 11, 2019, 01:57:04 pm
Veran, quiero  para mi juego hacer efectos de sonido cuyo volumen cambia segun la "distancia" del jugador.
Digamos que creo una bomba, la cual tendra esta función:

ae=audio_emitter_create()
audio_emitter_position(ae,x,y,0)


Luego la hago explotar:

audio_play_sound_on(ae,explota,0,1)

Y finalmente, debo quitar el emisor de sonido:

audio_emitter_free(ae)

Hasta aquí todo bien. Pero la cosa es que no quiero simplemente eliminar un emisor de sonido, digamos que quiero con una sola linea de código eliminarlos todos, algo que podria querer hacer tras un cambio de room para asegurarme de que no me olvido de eliminar ninguno de los emisores.
¿Como podría lograrlo?

Si piensas que los usuarios de tus programas son idiotas, sólo los idiotas usarán tus programas.

-Linus Torvalds ("Padre" de Linux)-
 


No Tienes Permisos Para Dar Puntos
point 0 Puntos

Este tema no recibió puntos.


Desconectado Silver_light

Respuesta #1 en: Noviembre 11, 2019, 04:10:51 pm
Para eliminar todos de golpe necesitas hacer tu script personalizado para borrar todos y cada uno de los emisores creados. Los cuales, antes debieran listarse dentro de, valga la redundancia, una lista. Esto para tener el registro de todos los emisores que se hayan creado.
Lo más práctico es utilizar las ds_list, porque crecen automáticamente, y se puede utilizar para recorrer enteramente la lista.

Primero deberías crear un script, que haga 2 cosas:
1) crear la lista si no existe.
2) crear un emisor y guardarlo en la lista.
3) devolver el emisor creado.
Puedes llamarlo simplemente crear_emisor_de_sonido();
Lo ideal sería crear una variable global antes para que obtenga el ID de la ds_list, dentro del script:
Luego, operas normalmente:
ae=crear_emisor_de_sonido()
audio_emitter_position(ae,x,y,0)

o:
audio_play_sound_on(ae,explota,0,1)

Luego creas el escript para borrar todos los emisores, el cual debería trabajar así:
1) recorrer la lista
2) obtener cada emisor y borrarlo
Lo cual puedes llamarlo borrar_todos_los_emisores();

Y finalmente deberías borrar la lista como tal, cuando ya no hagan falta emisores en tu juego:
ds_list_destroy(global.laListaDeEmisores )

 
Los siguientes usuarios dieron las gracias a este tema: Marth


Desconectado Marth

Respuesta #2 en: Noviembre 11, 2019, 10:39:06 pm
Así que no hay una opción tipo audio_emitter_free(all) o algo así que me haga las cosas fáciles.
En fin, montare el vector para la lista de emisores.

Si piensas que los usuarios de tus programas son idiotas, sólo los idiotas usarán tus programas.

-Linus Torvalds ("Padre" de Linux)-