В прошлом вопросе внезапно выяснилось, что 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 экземпляра одного звука и играть поочередно.
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
28
Если звук у тебя позиционный, то можно юзать какую-то там абилку со звуком через даммикаст, оно вроде не утечно

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

Не могу. Абилка сфера будет подавлять другие навешенные на него сферы, даже если она пустая. Если только повыщающую попробовать
25
Создание звука на ходу утечно и с этим ничего не сделать. Избежать утечки можно только если создать один звук, через редактор звука или в коде, и использовать всегда его.
Разумеется есть минус, в один момент времени звук можно играть только один раз. Если необходимо проигрывать один и тот же звук несколько раз одновременно, то придется костылить, например создавать 3-4 экземпляра одного звука и играть поочередно.
Принятый ответ
28
Hanabishi, что тогда делает функция KillSoundWhenDone на самом деле?
9
Разумеется есть минус, в один момент времени звук можно играть только один раз. Если необходимо проигрывать один и тот же звук несколько раз одновременно, то придется костылить, например создавать 3-4 экземпляра одного звука и играть поочередно.
А создать массив звуков на десяток-другой-сотню экземпляров и выделять при необходимости не прокатит?
25
rsfghd, не, она удаляет звук. Иначе бы утечка была еще больше. Там утекают какие-то остатки.
map_maiker, прокатит в принципе. Суть именно в количестве экземпляров.
28
Там утекают какие-то остатки.
Утекают не остатки, а локальная переменная.
И че делать?
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
И передавать сюда нужно не переменную звука, а путь к звуковому файлу. Переменные из редактора звуков тут не нужны.
25
PT153, не, там именно утекает если даже все правильно сделать. Создание звуков течет само по себе.
По крайней мере текло в классике. По рефу хз.
28
Интересно, я обязательно проверю это, но позже.
3
PT153:
Интересно, я обязательно проверю это, но позже.
Ну как, проверил?
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.