Доброго времени суток.
Мне необходимо написать код без утечек, которые забивают память.
Но я новичок, который с каждым годом открывает для себя все новее и новее вар. По этой причине мне сразу сложно разобраться во всех его аспектах. А редактор для меня стал просто "заставить мозг думать"
Но я новичок, который с каждым годом открывает для себя все новее и новее вар. По этой причине мне сразу сложно разобраться во всех его аспектах. А редактор для меня стал просто "заставить мозг думать"
Исходя из небольших статей с обучалками (а также спасибо большое rsfghd), я понял что сам юнит забивает память, но и точка, которая создается при создании юнита в позиции выбранного юнита.
Идея, добавить нужных юнитов в переменную (отряд), к примеру asd.
А после мне нужно создать ДАММИ юнита около каждого юнита в переменной asd.
И тут момент с оптимизацией "Позиции выбранного юнита". Ибо, как я понял из статей, она создает точку (которая вызывает утечку).
Ну и после всех манипуляций функцией (ниже) удалять переменную (отряда).
А после мне нужно создать ДАММИ юнита около каждого юнита в переменной asd.
И тут момент с оптимизацией "Позиции выбранного юнита". Ибо, как я понял из статей, она создает точку (которая вызывает утечку).
Ну и после всех манипуляций функцией (ниже) удалять переменную (отряда).
call DestroyGroup(udg_asd)
Сама логика триггера.
Действие:
Выбрать каждого юнита в зоне карты и совершить действие
Создать 1 юнита, для игрока 1, в позиции выбранного юнита.
Действие:
Выбрать каждого юнита в зоне карты и совершить действие
Создать 1 юнита, для игрока 1, в позиции выбранного юнита.
Так вот, мне необходим код, который будет удалять эти "утечки". Ну либо совмещенная сборка с функциями.
Надеюсь я правильно донес свою мысль хд
Принятый ответ
dummy* - даммисоздать DAMI юнита
вот пример выбора юнитов в темповую группу без утечек с использованием точек
есть несколько функций для выбора юнитов
native GroupEnumUnitsInRange takes group whichGroup, real x, real y, real radius, boolexpr filter returns nothing
native GroupEnumUnitsInRangeOfLoc takes group whichGroup, location whichLocation, real radius, boolexpr filter returns nothing
native GroupEnumUnitsInRect takes group whichGroup, rect r, boolexpr filter returns nothing
native GroupEnumUnitsOfPlayer takes group whichGroup, player whichPlayer, boolexpr filter returns nothing
native GroupEnumUnitsOfType takes group whichGroup, string unitname, boolexpr filter returns nothing
native GroupEnumUnitsSelected takes group whichGroup, player whichPlayer, boolexpr filter returns nothing
у некоторых есть аналоги с потолком выбора (кол-ва юнитов)
DestroyGroup( ... ) нужно использовать только если ты постоянно создаёшь группу до этого (в основном это требуется, если ты должен сделать действия с теми же юнитами спустя какое-то время, например выбрать кого-то там в области, наложить эффект, подождать 2 секунды и продамажить), но для темповых действий лучше иметь одну группу и просто очищать её
Загруженные файлы
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Главный хранитель этого ресурса хд
call GroupEnumUnitsInRect( udg_TempGroup, bj_mapInitialPlayableArea, udg_TempBlxpr )
если дружишь с английским то я думаю понятно что оно делает, если нет - выбор юнитов в группу в радиусе от точки, вот пример использования
zpxo:
zpxo:
zpxo:
Отредактирован zpxo
call GroupEnumUnitsInRect( udg_TempGroup, bj_mapInitialPlayableArea, udg_TempBlxpr )
Ибо иногда Дамми создаются за краем игровой карты. Тем самым я не могу с ними взаимодействовать, если они не в игровой зоне.
Я просто пытаюсь найти фразу для замены "mapInitialPlayableArea"
Как провернуть такое же действие, как выше, но с предметами?
У меня просто есть триггер, который берет все предметы на карте и совершает действие:
Триггер работает на ура. Но...
По началу счетчик Handle показывает при активации триггера +4/-4 и такие мелкие значения. Отклонения бывают на 1/2 единицы. Вроде бы это норма...
А после Каждый раз, когда триггер запускается - идет уже по +12 и спад не появляется, только рост и рост с каждой активацией.
Не могу понять... Почему в начале он показывает рост счетчика в 0, а после 60 секунды рост идет сильный и нет спада.
Также отключал триггер появления текста, просто происходит резкий рост и нет спада... И дальше счетчик увеличивается то на +12/14/20/40/50/
эх. сложно живётся гуишникам, сейчас объясню
Отредактирован zpxo
Но выстроил иллюзии, что вероятно точка создается одна, а не две.
По этой причине думал ничего не будет страшного. А оказывается все страшно 😄
Рандомный выбор именно утекает? Или любая работа со случайностью?
К примеру случайный угол, случайное число.
Отредактирован rsfghd
Я скажу так. Ты монстр, спасибо тебе огромное.
Счетчик вообще не двигается, а мои знания сегодня выросли еще на планку выше, чем за годы!
Сейчас данный триггер отрабатывает как часы и без каких либо утечек.
Также разобрался как в сценарии превратить реальное в целое число. И под себя получилось идеально
юзай отдельную функцию что я скинул, мне кажется так удобнее будет, а то какая-то дрисня со склейкой получилась
Отредактирован zpxo
Могу ли я заранее создать переменную с арифметикой? Где возьму сумму из группы юнитов и высчитаю 40%, а после переведу в реальное число и вставлю в bj_randomSubGroupWant?
К примеру так: call GetRandomSubGroupEx( udg_TempGroup[ 0 ], udg_TempGroup[ 1 ], R2I(udg_ANOMABalanceUron_Time_Procent) )
да, ты можешь так сделать, вот пример