Уважаемые форумчане, у меня такой вопрос является ли событие TriggerRegisterEnterRectSimple утечным ? на сколько? на что его заменить? у меня ничего не работает...
А теперь по подробнее:
Я вдруг в 2018 году понял что у меня что-то не так с этим событием и вот его начинка:
function TriggerRegisterEnterRectSimple takes trigger trig, rect r returns event
    local region rectRegion = CreateRegion()
    call RegionAddRect(rectRegion, r)
    return TriggerRegisterEnterRegion(trig, rectRegion, null)
endfunction
как видим у нас в нём утекает регион, ну с ним ничего не происходит, он не обнуляется не уничтожается и не перезаписывается, если что, то напомню, это событие входа юнита в некую область, ну у меня вообще областей нет кроме как "вся карта" поэтому я использую это событие вот так:
TriggerRegisterEnterRectSimple( triggername, bj_mapInitialPlayableArea), верно ли я понимаю, что событие работает для любого появившегося/рождённого каким либо способом юнита? даже если в условие самого триггера стоит проверка на тип или на ещё что нибудь? Потому что у меня входит 2к объектов при генерации нового уровня + 1к снарядов юнитов за уровнень, + прочие дамми и всё это для 7 такие триггеров если посчитать то получается 7к утечных локальных регионов, а на протяжении 20 таких прогрузок это 140 000 утечек, я не знаю у меня карта прекрасно работает, в целом меня это и не парит даже, но я понимаю что это не хорошо, хотя может я и не правильно посчитал, так поясните пожалуйста.
Значит что я сделал, я создал 2 региона в глобалках мимо кода и на переменных с названиями udg_RegionAllMap и RegionAllMap соответственно, потому в спустя 1 секунду после старта карты я делаю вот это :
RegionAllMap=CreateRegion()
RegionAddRect(RegionAllMap, bj_mapInitialPlayableArea)   
RegionAddRect(udg_RegionAllMap, bj_mapInitialPlayableArea)   
ну а в триггере прописываю
TriggerRegisterEnterRegion(gg_trg_name, RegionAllMap, null)
B всё замечательно, ничего не утекает, потому что НИЧЕГО И НЕ ПРОИСХОДИТ!
Поясните, что я не так делаю... спасибо....

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

Утечка - это когда не удаляются ненужные объекты. Здесь регион нельзя удалять, потому что без него событие не будет работать. Но если у вас много таких событий, то лучше использовать один регион для всех событий, при условии, что размеры региона не будут изменяться в процессе игры, потому что это может нарушить работу других событий, привязанных к данному региону.
А функция TriggerRegisterEnterRectSimple в теории не утечна, но на практике может утекать, например, если в потоке триггера будет вызвано её уничтожение RemoveRegion(GetTriggeringRegion()).
`
ОЖИДАНИЕ РЕКЛАМЫ...
0
32
6 лет назад
0
заработало с вот таким параметром , но вопрос ещё не закрыт
Загруженные файлы
2
26
6 лет назад
2
Впервые слышу, чтобы области и регионы утекали.
0
32
6 лет назад
0
8gabriel8, думаете всё нормально? у меня просто крыша поехала =) потому что я уже забыл, что утекает, а что нет
2
30
6 лет назад
2
8gabriel8, прекрасно утекают, они же не нативные типы.
Bergi_Bear, честно скажу, что в детали лезть не очень желание есть, вот тут решается аналогичная проблема (регистрация всех входящих на карту юнитов) без утечек и максимально изящным образом, можешь воспользоваться как референсом.
3
21
6 лет назад
3
Утечка - это когда не удаляются ненужные объекты. Здесь регион нельзя удалять, потому что без него событие не будет работать. Но если у вас много таких событий, то лучше использовать один регион для всех событий, при условии, что размеры региона не будут изменяться в процессе игры, потому что это может нарушить работу других событий, привязанных к данному региону.
А функция TriggerRegisterEnterRectSimple в теории не утечна, но на практике может утекать, например, если в потоке триггера будет вызвано её уничтожение RemoveRegion(GetTriggeringRegion()).
Принятый ответ
3
32
6 лет назад
3
Для того чтобы не мусолить кондишены если у вас 100500 юнитов появляются - добавье в событие болекспр, болекспры очень быстрые, так же будут предотвращать срабатывание триггера на ненужных юнитов, к примеру даммиков.
2
30
6 лет назад
2
болекспры очень быстрые
Целиком зависит от объёма данных, которые необходимо запросить для получения результата, очень легко можно и крайне медленный сделать.
6
32
6 лет назад
6
Clamp, не я про то что болекспры быстрее отдельных условий или проверок уже в акшине триггера, тут движок формирует своего рода обьект который работает вне виртуальной JASM машине и поэтому выполняется быстрее, поэтому циклы с условиями не рекомендуются юзать, как многие любят ибо влом объявлять еще одну функцию для болекспра. Ну это так, если уж очень хочется занятся оптимизацией, то раньше были чуваки (видел в некоторых западных картах) делающие все действия в болекспре, т.е нету ни фор груп, ниче, глобальную групу чистят и GroupEnumUniutsInRange (g, x,y, r, bolexpr) в котором сразу и условие и после него действия которые нужно проделать с юнитами в группе.
0
32
6 лет назад
0
Ладно, хорошо, я вроде, что-то понял, ложная тревога в общем, всем спасибо
Чтобы оставить комментарий, пожалуйста, войдите на сайт.