В прошлом вопросе внезапно выяснилось, что 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
Вы что тут несёте...
call PlaySoundBJ( gg_snd_AltarOfKingsWhat1 )
Это неверный код.
SсRealm, нафиг тебе вообще PlaySoundBJ?
28
Проиграться может все что угодно.
Проиграется только то, что ты и указал, это раз, во вторых, локалка бы тебе ничем не помогла проиграть звук, потому что всё что ты делаешь с ней, это пытаешься уничтожить
21
PT153:
Вы что тут несёте...
call PlaySoundBJ( gg_snd_AltarOfKingsWhat1 )
Это неверный код.
SсRealm, нафиг тебе вообще PlaySoundBJ?
Я тут пытаюсь утечку звука обнулить. Пока не особенно понятно

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

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
    }
21
У меня звук проигрывается на каждом выстреле и когда меняется оружие изменяется звук выстрела. Приехали!. И че делать? Если я каждый звук проигрываю тригерно?
28
Если звук у тебя позиционный, то можно юзать какую-то там абилку со звуком через даммикаст, оно вроде не утечно

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

Не могу. Абилка сфера будет подавлять другие навешенные на него сферы, даже если она пустая. Если только повыщающую попробовать
25
Создание звука на ходу утечно и с этим ничего не сделать. Избежать утечки можно только если создать один звук, через редактор звука или в коде, и использовать всегда его.
Разумеется есть минус, в один момент времени звук можно играть только один раз. Если необходимо проигрывать один и тот же звук несколько раз одновременно, то придется костылить, например создавать 3-4 экземпляра одного звука и играть поочередно.
Принятый ответ
28
Hanabishi, что тогда делает функция KillSoundWhenDone на самом деле?
9
Разумеется есть минус, в один момент времени звук можно играть только один раз. Если необходимо проигрывать один и тот же звук несколько раз одновременно, то придется костылить, например создавать 3-4 экземпляра одного звука и играть поочередно.
А создать массив звуков на десяток-другой-сотню экземпляров и выделять при необходимости не прокатит?
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.