volume-highEfectos de sonido

Reproduce efectos de sonido de un solo uso y posicionales (y audio en bucle simple).

Usa la API de SFX para reproducir efectos de sonido cortos (clics de la interfaz, pasos, impactos) y audio simple en bucle (bucles ambientales, música).

circle-exclamation

Inicio rápido (reproducir un sonido)

click := get_asset(SFX_Asset, "sfx/click.wav");

desc := SFX.default_sfx_desc();
SFX.play(click, desc);

Referencia de la API de SFX

SFX_Asset :: class : Asset {}

SFX_Channel :: enum {
    SFX;
    MUSIC;
}

SFX_Desc :: struct {
    positional:       bool;
    position:         v2 #read_only;
    delay:            float;
    volume:           float;
    speed:            float;
    volume_perturb:   float;
    speed_perturb:    float;
    range_multiplier: float;
    loop_timeout:     float;
    entity_to_follow: u64;
    loop:             bool;
    channel:          SFX_Channel;

    set_position :: method(p: v2);
}

SFX :: struct {
    play            :: proc(asset: SFX_Asset, desc: SFX_Desc) -> u64;
    stop            :: proc(id: u64);
    default_sfx_desc :: proc() -> SFX_Desc;
}

Obtener un SFX_Asset

Los efectos de sonido viven en la carpeta res de tu juego (a menudo dentro de res/sfx/).

  • Arrastra sonidos desde el Catálogo de activos (el editor los descarga en res/)

  • O añade tu propio .wav archivo en res/ desde tu máquina local

Luego refiérete a ellos por ruta:

circle-exclamation
circle-info

Algunos activos integrados de la plataforma se referencian mediante $AO/... rutas. Por ejemplo: get_asset(SFX_Asset, "$AO/click.wav").

Sonidos posicionales (tipo 3D)

Por defecto, SFX se reproduce como un sonido “2D” no posicional. Para hacerlo posicional, establece una posición:

Seguir una entidad (fuente de sonido en movimiento)

Si un sonido debe moverse con una entidad (zumbido de motor, proyectil zumbante, etc.), establece entity_to_follow:

circle-info

Si entity_to_follow está establecido, normalmente no necesitas llamar también a set_position (no pasa nada si lo haces).

Bucle + detención

SFX.play devuelve un ID que puedes detener más tarde:

circle-exclamation

Variación (recomendado para SFX que se repiten mucho)

Si reproduces el mismo sonido con frecuencia (pasos, recogidas), añade una variación sutil:

circle-info

Mantén volume_perturb / speed_perturb sutiles. Valores por encima de ~0.3 normalmente suenan mal.

Servidor vs cliente (red + predicción)

SFX puede reproducirse desde cualquiera de los dos lados, según la intención:

  • Eventos de juego autoritativos (todos deberían escucharlo): reproducir en el servidor

  • Retroalimentación local/de interfaz (solo el jugador local): reproducir en el cliente

Ejemplo: SFX posicional autoritativo:

Última actualización