В прошлом вопросе внезапно выяснилось, что function PlaySound takes string soundName returns nothing утечна
Мне не сложно создать локалку и обнулять только записанный в нее звук. но меня смутило вот что :
Ведь звук проигрывается в карте из заранее созданных звуковых переменных,которые только в карте? Так работают все звуки. Ну это сделано как я понял для того, чтобы не приходилось перебирать все звуки варика.
Только зачем тогда создание отдельно локалки или глобалки звука если мы их берем из звуковой переменной? Или виноват хэндл у бж звука?
Короче делаю :
function Trig_____________________________________001_Actions takes nothing returns nothing
local sound u
call PlaySoundBJ( gg_snd_AltarOfKingsWhat1 )
set u = bj_lastPlayedSound
call : destroy u
set u = null
endfunction
===========================================================================
function InitTrig_____________________________________001 takes nothing returns nothing
set gg_trg_____________________________________001 = CreateTrigger( )
call TriggerAddAction( gg_trg_____________________________________001, function Trig_____________________________________001_Actions )
endfunction
Так что ли?😕

Принятый ответ

Создание звука на ходу утечно и с этим ничего не сделать. Избежать утечки можно только если создать один звук, через редактор звука или в коде, и использовать всегда его.
Разумеется есть минус, в один момент времени звук можно играть только один раз. Если необходимо проигрывать один и тот же звук несколько раз одновременно, то придется костылить, например создавать 3-4 экземпляра одного звука и играть поочередно.
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
0
28
3 года назад
0
Я тут пытаюсь утечку звука обнулить.
А откуда они берутся?
2
27
3 года назад
Отредактирован rsfghd
2
Я посмотрел, у меня тоже утекает это, что бы я не делал, хотя утекает до определённого момента, но наверное это уже баг счётчика
Попробуй этот вариант

PT153, из-за local sound
раскрыть
function PlaySound takes string soundName returns nothing
    local sound soundHandle = CreateSound(soundName, false, false, true, 12700, 12700, "")
    call StartSound(soundHandle)
    call KillSoundWhenDone(soundHandle)
endfunction

private void AddSound(string s, real x, real y, real z, int vol, real cutoff){
        sound snd = CreateSound(s, false, true, true, 10, 10, "SpellsEAX")
        SetSoundChannel(snd, 5)
        SetSoundVolume(snd, vol)
        SetSoundPitch(snd, 1)
        SetSoundDistances(snd, 600., 10000.)
        SetSoundDistanceCutoff(snd, cutoff)
        SetSoundConeAngles(snd, 0.0, 0.0, 127)
        SetSoundConeOrientation(snd, 0.0, 0.0, 0.0)
        SetSoundPosition(snd, x, y, z)
        SetSoundPlayPosition(snd, 1000)
        StartSound(snd)
        KillSoundWhenDone(snd)
        snd = null
    }
0
20
3 года назад
0
У меня звук проигрывается на каждом выстреле и когда меняется оружие изменяется звук выстрела. Приехали!. И че делать? Если я каждый звук проигрываю тригерно?
2
27
3 года назад
2
Если звук у тебя позиционный, то можно юзать какую-то там абилку со звуком через даммикаст, оно вроде не утечно

0
20
3 года назад
0
rsfghd:
Если звук у тебя позиционный, то можно юзать какую-то там абилку со звуком через даммикаст, оно вроде не утечно

Не могу. Абилка сфера будет подавлять другие навешенные на него сферы, даже если она пустая. Если только повыщающую попробовать
2
26
3 года назад
2
Создание звука на ходу утечно и с этим ничего не сделать. Избежать утечки можно только если создать один звук, через редактор звука или в коде, и использовать всегда его.
Разумеется есть минус, в один момент времени звук можно играть только один раз. Если необходимо проигрывать один и тот же звук несколько раз одновременно, то придется костылить, например создавать 3-4 экземпляра одного звука и играть поочередно.
Принятый ответ
0
27
3 года назад
0
Hanabishi, что тогда делает функция KillSoundWhenDone на самом деле?
0
9
3 года назад
0
Разумеется есть минус, в один момент времени звук можно играть только один раз. Если необходимо проигрывать один и тот же звук несколько раз одновременно, то придется костылить, например создавать 3-4 экземпляра одного звука и играть поочередно.
А создать массив звуков на десяток-другой-сотню экземпляров и выделять при необходимости не прокатит?
2
26
3 года назад
2
rsfghd, не, она удаляет звук. Иначе бы утечка была еще больше. Там утекают какие-то остатки.
map_maiker, прокатит в принципе. Суть именно в количестве экземпляров.
0
28
3 года назад
Отредактирован PT153
0
Там утекают какие-то остатки.
Утекают не остатки, а локальная переменная.
И че делать?
function PlaySoundX takes string soundName returns nothing
    local sound soundHandle = CreateSound(soundName, false, false, true, 12700, 12700, "")
    call StartSound(soundHandle)
    call KillSoundWhenDone(soundHandle)
    set soundHandle = null
endfunction
И передавать сюда нужно не переменную звука, а путь к звуковому файлу. Переменные из редактора звуков тут не нужны.
0
27
3 года назад
0
PT153, если верить счётчику, это не поможет)
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.