volume-highEfectos de Sonido

Reproduce efectos de sonido puntuales y posicionales (y audio simple en bucle).

Usa la API 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 SFX

SFX_Asset :: class : Asset {}

SFX_Desc_Flags :: enum {
    POSITIONAL :: 1 << 0;
}

SFX_Channel :: enum {
    SFX;
    MUSIC;
}

SFX_Desc :: struct {
    flags:            SFX_Desc_Flags;
    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;
}

Obteniendo un SFX_Asset

Los efectos de sonido viven en el res de tu juego (a menudo bajo 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 del motor, proyectil zumbante, etc.), establece entity_to_follow:

circle-info

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

Bucle + detención

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

circle-exclamation

Variación (recomendado para SFX repetitivos)

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

circle-info

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

Servidor vs cliente (red + predicción)

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

  • Eventos de juego autoritativos (todo el mundo debería escucharlo): reproducir en el servidor

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

Ejemplo: SFX posicional autoritativo:

Última actualización