XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов> Jass
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Закрытая тема
 
DaeDR

offline
Опыт: 8,074
Активность:
Утечки спецэффекта
Допустим, создаю 4 эффекта вот так:
((код jass
call DestroyEffect ( AddSpecialEffect( "Abilities\\Spells\\Human\\ThunderClap\\ThunderClapCaster.mdl", GetUnitX(gg_unit_Hmkg_0014), GetUnitY(gg_unit_Hmkg_0014) ) )
))
И все вроде нормально, но по прошествии нескольких секунд id объектов увеличивается на 4 единицы.
Как так?
Посмотрите пожалуйста пример. Может у меня глюки пошли?
Просто как я ни стараюсь: через точку, через переменную effect, ничего не получается.
DaeDR добавил:
Не знаю, как, но если удалить эффект после того как он исчез (его визуальная часть), то "утечки нет"!
Может кто-нибудь объяснить это? получается, что все спецэффекты надо удалять через таймер?
Прикрепленные файлы
Тип файла: w3x Test.w3x (33.9 Кбайт, 2 просмотров )

Отредактировано DaeDR, 22.02.2012 в 20:20.
Старый 22.02.2012, 21:09
Ty3uK

offline
Опыт: 2,469
Активность:
Нет, эта конструкция не утечна. Скорее всего барахлит счетчик. Возможно, вы используете маленький промежуток
Старый 22.02.2012, 21:24
DaeDR

offline
Опыт: 8,074
Активность:
Ty3uK, использую вот такую конструкцию (уже давно где-то на xgm'e взял)
» Код
function Trig_check_Actions takes nothing returns nothing
    local timer Timer = CreateTimer()
    local string S
    local integer i = 0
    //if udg_i_test < GetHandleId(Timer) then // !=  <
        set S = I2S(( GetHandleId(Timer) - 1048500 )) // 1048500 - число, нужное для уменьшения числа, выводимого на экран
        call DisplayTextToPlayer(Player(0), 0, 0, S) // сообщение выводится для игрока 1 Player(0)
        set S = null
        set udg_i_test = GetHandleId(Timer)
    //endif
    call DestroyTimer(Timer)
    set Timer = null
endfunction

//===========================================================================
function InitTrig_check takes nothing returns nothing
    set gg_trg_check = CreateTrigger()
    call TriggerRegisterTimerEvent(gg_trg_check, 1.0, true)
    call TriggerAddAction(gg_trg_check, function Trig_check_Actions)
endfunction
1 секунда, думаю этого достаточно большой промежуток.
Старый 22.02.2012, 21:32
Ty3uK

offline
Опыт: 2,469
Активность:
Все зависит от анимации спецэффекта. Дело в том, что эта конструкция удаляет его тогда, когда анимация Birth полностью проиграется. А у некоторых эффектов она может быть и 3. секунды, и больше
Старый 22.02.2012, 21:35
DaeDR

offline
Опыт: 8,074
Активность:
Ty3uK, т.е. лучше подождать, и через таймер? Спасибо, теперь буду знать. сколько же косяков тогда...
Старый 22.02.2012, 21:37
Ty3uK

offline
Опыт: 2,469
Активность:
Нет, такая конструкция не дает утечек. Таймер юзать смысла нет, она точно так же удалит эффект тогда, когда он полностью проиграется
Старый 22.02.2012, 21:39
DaeDR

offline
Опыт: 8,074
Активность:
Ty3uK, спасибо. пойду лучше посплю.
тему можно закрыть
Старый 22.02.2012, 21:43
Ty3uK

offline
Опыт: 2,469
Активность:
А на запуск таймера надо потратить ресурсы- сам таймер, хэндл эффекта, запуск, удаление эффекта, уничтожение таймера, очистка хт... Это же все надо сделать. Зачем, когда можно использовать эту конструкцию?
Старый 22.02.2012, 21:44
JaBeN_Симфер

offline
Опыт: 20,050
Активность:
раскомментируй строки IF - Endif, они для того, чтобы таймер не показывал текущее число объектов, а показывал только увеличение. Если количество объектов безостановочно растет, то есть утечки. Промежуток можно уменьшить до 0.1, это даст более точный результат. Опять же, нужно смотреть динамику увеличения, а не постоянно анализировать текущее количество, т.к. оно скачет!
Старый 23.02.2012, 03:24
ScorpioT1000
Работаем
offline
Опыт: отключен
DaeDR, строки не удаляются, читай подробнее: xgm.ru/p/wc3/w3_data_types
Старый 23.02.2012, 03:29
DaeDR

offline
Опыт: 8,074
Активность:
ScorpioT1000, огромное Спасибо.
Старый 23.02.2012, 07:18
Закрытая тема

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 21:32.