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

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
2
21
3 года назад
Отредактирован biridius
2
Кстати выдает ошибку почему то....
call : destroy u
функция убийства звука вроде KillSoundWhenDone
0
27
3 года назад
Отредактирован rsfghd
0
SсRealm, смешно наверное самому придумывать названия нативных функций?)
Посмотри Function List используя ключевые слова, например Sound

К тому же
local sound u
call PlaySoundBJ( gg_snd_AltarOfKingsWhat1 )
set u = bj_lastPlayedSound
call : destroy u
Зачем создавать локалку, если можно сразу уничтожать bj_lastPlayedSound. В таких действиях нет смысла

А, и в ошибке вроде указывается проблема, там минимальные знания английского, например, что такой функции не существует
0
20
3 года назад
0
В чем был вопрос то? А нафига делать переменную звукам, если все переменные проигрываются из внутренней переменных звуков?!

rsfghd:
SсRealm, смешно наверное самому придумывать названия нативных функций?)
Посмотри Function List используя ключевые слова, например Sound

К тому же
local sound u
call PlaySoundBJ( gg_snd_AltarOfKingsWhat1 )
set u = bj_lastPlayedSound
call : destroy u
Зачем создавать локалку, если можно сразу уничтожать bj_lastPlayedSound. В таких действиях нет смысла

А, и в ошибке вроде указывается проблема, там минимальные знания английского, например, что такой функции не существует
Потому что я не доверяю понятиям варика, когда что то там проигралось. Проиграться может все что угодно. Мне нужна конкретная локалка, чтобы точно знать что удалиться в данный момент!
Загруженные файлы
2
28
3 года назад
2
Вы что тут несёте...
call PlaySoundBJ( gg_snd_AltarOfKingsWhat1 )
Это неверный код.
SсRealm, нафиг тебе вообще PlaySoundBJ?
0
27
3 года назад
0
Проиграться может все что угодно.
Проиграется только то, что ты и указал, это раз, во вторых, локалка бы тебе ничем не помогла проиграть звук, потому что всё что ты делаешь с ней, это пытаешься уничтожить
0
20
3 года назад
0
PT153:
Вы что тут несёте...
call PlaySoundBJ( gg_snd_AltarOfKingsWhat1 )
Это неверный код.
SсRealm, нафиг тебе вообще PlaySoundBJ?
Я тут пытаюсь утечку звука обнулить. Пока не особенно понятно

rsfghd:
Проиграться может все что угодно.
Проиграется только то, что ты и указал, это раз, во вторых, локалка бы тебе ничем не помогла проиграть звук, потому что всё что ты делаешь с ней, это пытаешься уничтожить
Поставлю вейт и через пару сек удалю. Там все равно проигрываются разные звуки выстрела
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:
Если звук у тебя позиционный, то можно юзать какую-то там абилку со звуком через даммикаст, оно вроде не утечно

Не могу. Абилка сфера будет подавлять другие навешенные на него сферы, даже если она пустая. Если только повыщающую попробовать
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.