Главная » Статьи » Базовые знания |
Предисловие Многие видели, что карты могут подвисать даже на мощных компьютерах. Это явление вызвано утечками памяти, приводящими к небольшим лагам или полному повисанию карты. В этой статье описывается как устранять утечки и к ней приложена карта-пример. Утечки памяти Их могут вызвать предметы, декорации, регионы, точки, группы юнитов, плавающий текст и другие объекты, после которых остаётся не удалённая информация в памяти. Рассмотрим самое элементарное: 1) •Триггеры с малым периодом 2) •Спецэффекты 3) •Звуки 4) •Юниты 5) •Точки Далее рассмотрим, как правильно писать триггеры, что б не было утечек: Триггеры с малым периодом Это периодические триггеры, которые например, срабатывают каждые пять секунд. Такой триггер будет вызывать лаги в том случае, если во времени срабатывания стоят десятые или сотые доли секунды и в триггере слишком много действий (особенно тех, которые описаны ниже). Для исправления глюков необходимо уменьшить периодичность срабатывания или количество действий в триггере. Лучше избегать создание таких триггеров или создавать их как можно меньше. Спецэффекты Когда триггерно создаётся спецэффект (на юните или в области), ему выделяется память в игре. После проигрывания спецэффекта он не виден, но находится в памяти и занимает там место. Чтоб очистить память, после проигрывания спецэффекта создаём это нехитрое действие: Спецэффект полностью проиграется и удалиться. Звуки Звуки забивают памать аналогично спецэффектам. Лечится это теми же методами: Удаление звука происходит так же, как и спецэффекта (см. выше) Юниты Очень часто это происходит в TD, когда после смерти крипов остаются лежать трупы. Они занимают место в памяти так же, как и живой юнит (до полного разложения), поэтому после смерти нужно удалять труп: После написания подобного триггера трупов после смерти оставаться не будет, и это разгрузит игровую память, особенно если в карте имеются большие волны крипов. Точки Точка, как и все созданные во время игры объекты занимает память. Для устранения утечки нужно сначала создать точку, записать в переменную типа «точка», сделать с этой точкой действие, а лишь потом удалять: Джас код: call
RemoveLocation( udg_TempPoint ) Где
«TempPoint» имя переменной. Для каждой новой точки создавать переменную не нужно, можно эти данные записать в старую переменную. На заметку Чтобы немного увеличить ресурс памяти, нужно проделать следующее: Джас код: call DoNotSaveReplay() При создании такого триггера не будет записываться реплей, и память немного разгрузится. Заключение Утечку может вызвать любой объект, который создался во время игры. Если он в дальнейшем не используется, то его нужно обязательно удалить, иначе со временем игровая память закончится. Но не все карты требуют оптимизации и полного удаления утечек. В первую очередь это многопользовательские карты и карты с малым периодом триггеров. Остальное нужно смотреть по работоспособности карты, будет она подвисать или нет. Карта пример к статье: Устранение утечек памяти.w3x | |
Категория: Базовые знания | Добавил: Stinger (18.04.2012) | Автор: Stinger E W | |
Просмотров: 4408
| Теги: |
Всего комментариев: 0 | |