Изучаем GUI триггеры Часть 9
|
|
-
влад10011 | Дата: Воскресенье, 29-07-2012, 19:18:39 | Сообщение # 1 |
загрузка наград ...
Группа: V.I.P.
Сообщений: 1265
Репутация: 1039
Статус: Не на сайте
|
Утечки и их устранение Для начала разберёмся что же такое эти "Утечки": Утечки это то что застревает в памяти варика(в процессе игры) это могут быть: Не удалённые игровые объекты такие как: Спецэффектты, событие(весит где-то 100 байт), переменные(локальные и глобальные с условием что в них что то записано), декорации(весят не много но если у вас ланд 400х400 будет лагать) и тд. К примеру вы создаёте спецэффект, неважно мгновенных он или пассивный при исчезновении мгновенного он будет висеть в памяти варика до конца игры тк это игровой объект или же вы создаёте невидимого дамми который потом умирает(или же любой юнит на карте) даже мёртвый юнит засоряет память тк он тоже является игровым объектом и вот способ устранение утечек: Вот 1 пример с событием типо мы создаём спелл на крит: Событие каждую 1 сек Условие ---------------------- Действие: Выбрать каждого юнита в зона игровой карты и делать действия: Добавить событие к новому триггеру юнит выбранный юнит получает урон Новый триггер: Событие ----------------------- (тк оно добавляется) Условие ---------------- Действие Если тогда Иначе Если сравнение чисел случайное число от 1 до 100 меньше или равно 15 (создаём условие с 15% вероятностью) Тогда: Damage Target Атакующий юнит "атакованный юнит" Арифметика получаемый урон умножить на 2 Иначе нечего не делать И так что мы с вами сделали? Мы сделали триггер который добавляет событие что юнит атакован КАЖДУЮ СЕКУНДУ, а юнитов на карте может быть больше 500 получается +500 событий в секунду!!! К сожалению событие у триггера никак не удалить...поэтому если будете применять что то вроде этого старайтесь рассчитать количество событий чтобы варик не полетел с ерорами к чертям. Сейчас самое главное как удалить информацию внутри переменных: К примеру вы хотите сделать MUI спелл который могут юзать хоть сколько юнитов и для этого нам на помощь придут локальные переменные и как мы знаем они создаются при каждом старте триггера новые а вот представте что вы создали 7-10 локальных переменных и не удалили информацию в них... Если их будут юзать раз 300-700 за игру и темболее если у вас будет много таких триггеров с не удалённой информацией последствие могут быть печальны от жутких лагов до ероров игры... Для этого есть такие команды как: set "имя переменной" =null (это действует только для тех переменных у которых нет значений такие как unit effect location и тд) set "имя меременной" =0 (это действует только на переменные которые имеют в себе числа это integer real и тд) call DestroyGroup("имя переменной группы") (после чего обнулить переменную командой set "имя группы"=null) call RemoveLocation("имя переменной точки location") (тоже самое только точка) call DoNotSaveReplay() (заставит варик не писать реплей игры а значит снизит её нагрузку) P.S.integer, real, boolean и string не надо обнулять, нет абсолютно никакого смысла, если только вам нужно обнулить значение для повторного использования например в цикле. Вот и моя статья подошла к концу
Look at my horse!
|
| | |
-
AncientPenguin | Дата: Понедельник, 30-07-2012, 00:01:30 | Сообщение # 2 |
загрузка наград ...
Группа: Избранные
Сообщений: 449
Репутация: 526
Статус: Не на сайте
|
Quote (влад10011) Событие юнит умирает Условие Умирающий юнит не равно герой Действие удалить умирающий юнит из игры
Гонишь, юнит при смерти удаляется из игры.
Quote (влад10011) Это устранит большую часть утечек, НО он всё ещё будет засорять память но как окончательно его удалить, вы узнаете изучая кеш-таблицы.
Не кеш, а хеш и при смерти юнита там не самого юнита надо удалять, а записи из хеш-таблицы которые ты повесил на этого юнита.
Quote (влад10011) set "имя меременной" =0
integer, real, boolean и string не надо обнулять, нет абсолютно никакого смысла.
Quote (влад10011) call DestroyGroup("имя переменной группы") (после этого действия обнулять группу нет смысла тк она удалена)
Любые объекты (все что не integer, real, boolean и string) нужно сначала удалить функцией, а потом обнулить ссылку на них (set lalala = null), иначе в памяти остается ссылка.
|
| | |
-
влад10011 | Дата: Понедельник, 30-07-2012, 00:33:27 | Сообщение # 3 |
загрузка наград ...
Группа: V.I.P.
Сообщений: 1265
Репутация: 1039
Статус: Не на сайте
|
Quote (AncientPenguin) Любые объекты (все что не integer, real, boolean и string) нужно сначала удалить функцией, а потом обнулить ссылку на них (set lalala = null), иначе в памяти остается ссылка. я читал в статьях везде написано что если удалить локацию или группу то обнулять нету смысла Quote (AncientPenguin) Гонишь, юнит при смерти удаляется из игры. он не удаляется! Х_Х Quote (AncientPenguin) integer, real, boolean и string не надо обнулять, нет абсолютно никакого смысла. ну я знаю просто из принципа всё обнулить обнуляю всё)Добавлено (30/07/2012, 00:33:27) ---------------------------------------------
Quote (AncientPenguin) Не кеш, а хеш какая разница Х_Х
Look at my horse!
|
| | |
-
Alisher | Дата: Понедельник, 30-07-2012, 09:47:01 | Сообщение # 4 |
Раб
загрузка наград ...
Группа: Пользователи
Сообщений: 18
Репутация: 240
Статус: Не на сайте
|
Тебе же убер сказал! Ты че творишь?
Баллы - 0
|
| | |
-
влад10011 | Дата: Понедельник, 30-07-2012, 12:37:14 | Сообщение # 5 |
загрузка наград ...
Группа: V.I.P.
Сообщений: 1265
Репутация: 1039
Статус: Не на сайте
|
эм....что сказал?
Look at my horse!
|
| | |
-
Alisher | Дата: Понедельник, 30-07-2012, 12:42:37 | Сообщение # 6 |
Раб
загрузка наград ...
Группа: Пользователи
Сообщений: 18
Репутация: 240
Статус: Не на сайте
|
Сказал как отрезал. Себя...
Баллы - 0
|
| | |
-
влад10011 | Дата: Понедельник, 30-07-2012, 12:45:12 | Сообщение # 7 |
загрузка наград ...
Группа: V.I.P.
Сообщений: 1265
Репутация: 1039
Статус: Не на сайте
| | |
-
Alisher | Дата: Понедельник, 30-07-2012, 12:48:23 | Сообщение # 8 |
Раб
загрузка наград ...
Группа: Пользователи
Сообщений: 18
Репутация: 240
Статус: Не на сайте
|
короче он уже написал такую статью.
Баллы - 0
|
| | |
-
AncientPenguin | Дата: Понедельник, 30-07-2012, 13:20:47 | Сообщение # 9 |
загрузка наград ...
Группа: Избранные
Сообщений: 449
Репутация: 526
Статус: Не на сайте
|
Исправь статью, в частности:
Quote (AncientPenguin) юнит при смерти удаляется из игры. Quote (AncientPenguin) integer, real, boolean и string не надо обнулять, нет абсолютно никакого смысла. Quote (AncientPenguin) а потом обнулить ссылку на них (set lalala = null), иначе в памяти остается ссылка.
и
Quote (влад10011) Quote (AncientPenguin) Не кеш, а хеш
какая разница Х_Х
Примерно такая же как между коровой и самолетом =)
|
| | |
-
влад10011 | Дата: Понедельник, 30-07-2012, 13:41:37 | Сообщение # 10 |
загрузка наград ...
Группа: V.I.P.
Сообщений: 1265
Репутация: 1039
Статус: Не на сайте
|
исправил Х_Х
Look at my horse!
|
| | |