volume-highЗвуковые эффекты

Воспроизведение одноразовых и позиционных звуковых эффектов (и простого зацикленного аудио).

Используйте SFX API для воспроизведения коротких звуковых эффектов (щелчки интерфейса, шаги, удары) и простого циклического аудио (фоновые петли, музыка).

circle-exclamation

Быстрый старт (воспроизведение звука)

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

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

Справочник по SFX API

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;
}

Получение SFX_Asset

Звуковые эффекты находятся в папке res вашей игры (часто в папке res/sfx/).

  • Перетаскивайте звуки из Каталога ассетов (редактор загружает их в res/)

  • Или добавьте свой .wav файл в res/ с вашего локального компьютера

Затем обращайтесь к ним по пути:

circle-exclamation
circle-info

Некоторые встроенные платформенные ассеты ссыланы через $AO/... пути. Например: get_asset(SFX_Asset, "$AO/click.wav").

Позиционные (3D-подобные) звуки

По умолчанию SFX воспроизводится как непозиционный «2D» звук. Чтобы сделать его позиционным, установите позицию:

Следование за сущностью (движущийся источник звука)

Если звук должен двигаться вместе с сущностью (гудение двигателя, жужжание снаряда и т.д.), установите entity_to_follow:

circle-info

Если entity_to_follow установлено, обычно не нужно дополнительно вызывать set_position (ничего страшного, если вы это сделаете).

Циклическое воспроизведение и остановка

SFX.play возвращает ID, который можно остановить позже:

circle-exclamation

Вариация (рекомендуется для часто повторяющихся SFX)

Если вы воспроизводите один и тот же звук часто (шаги, подбор предметов), добавьте тонкую вариацию:

circle-info

Держите volume_perturb / speed_perturb тонкими. Значения выше примерно0.3 обычно звучат неправильно.

Сервер против клиента (сеть и предсказание)

SFX можно воспроизводить с любой стороны, в зависимости от намерений:

  • Авторитетные игровые события (все должны это услышать): воспроизводите на сервере

  • Локальная/интерфейсная обратная связь (только локальный игрок): воспроизводите на клиенте

Пример: авторитетный позиционный SFX:

Последнее обновление