For the complete documentation index, see llms.txt. This page is also available as Markdown.

Sonido y respuesta háptica

Reproduce efectos de sonido y retroalimentación háptica local.

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).

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_Channel :: enum {
    SFX;
    MUSIC;
}

SFX_Desc :: struct {
    specific_to_player: Player;
    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;
    unique_id:        u64;

    set_position :: method(p: v2);
}

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

Obtener un SFX_Asset

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

  • Arrastra sonidos desde el Catálogo de recursos (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 su ruta:

Algunos recursos de plataforma integrados usan rutas $AO/... . Por ejemplo: get_asset(SFX_Asset, "$AO/sfx/FUI Hologram Ping Tone Echoed.wav").

Sonidos posicionales (tipo 3D)

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

Siguiendo una entidad (fuente de sonido en movimiento)

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

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

Sonidos dirigidos a un jugador

Establece specific_to_player cuando el servidor deba rastrear el sonido pero solo un cliente deba oírlo realmente:

Reproducción en bucle + detención

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

Sonidos repetidos rápidamente y variación

Para sonidos repetitivos rápidos como pasos o armas automáticas, asigna a cada evento lógico un ID único. Asocia un índice de evento monótono sincronizado a su entidad origen cuando el sonido no siga a esa entidad:

El mismo evento lógico debe conservar el mismo ID único en el cliente, el servidor y cada resimulación. Cada evento cercano distinto debe obtener un valor diferente. Derívalo solo de un índice de evento que esté sincronizado y sea estable durante la predicción. entity_to_follow participa en la identidad del sonido, así que cuando se asigne, usa el índice del evento directamente en lugar de mezclar el ID de la entidad en ID único.

Una variación sutil puede evitar que los sonidos reproducidos con frecuencia se vuelvan monótonos:

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

Predicción y asignación de objetivo

Llama a los sonidos de gameplay desde la misma ruta predicha compartida que el evento que los causó. El sistema de sonido reconcilia el sonido predicho de un cliente con el resultado del servidor, así que no envuelvas SFX.play en Game.is_server() o player.is_local().

Para un sonido que solo un jugador debe oír, establece desc.specific_to_player. Esto mantiene el evento en el código de gameplay compartido mientras dirige la reproducción al cliente de ese jugador.

Hápticos

Haptics.play_impact activa la respuesta háptica de impacto en el dispositivo local. Llámalo solo para el jugador local:

Elige .LIGHT, .MEDIUM, o .HEAVY. Los hápticos actualmente funcionan en iOS. Las llamadas en Android, la web, Windows y los servidores no hacen nada.

Los hápticos no se sincronizan, no se dirigen ni se deduplican. Actívalos en el punto de interacción local en lugar de desde código de gameplay de toda la escena.

Última actualización