Сейчас 15:40:54 Понедельник, 27 сентября, 2021 год
Главная ⇒ Форум ⇐ RSS Файлы Cтатьи Картинки В о й т и   или   з а р е г и с т р и р о в а т ь с я

Меню сайта

Категории

Наш опрос
Какой тип карт вам нравится больше всего?
Проголосовало: 145027

Сейчас на сайте
На сайте всего: 2
Гостей: 2
Пользователей: 0

Реклама

Главная » Статьи по WarCraft 3 » Создание карт » Прочее
Уменьшаем лаги в карте
Как уменьшить лаги.


Вы наверняка часто сталкивались с жалобами игроков на лагающую карту или же у вас подвисает карта во время игры? Эта статья расскаже вам об источниках лагов и как убрать эти лаги.

1. Лаги при инициализации карты. Это может быть долгое время загрузки или же лаги сразу же после старта игры. Есть несколько причин этих лагов:

А. Создание войск и героев.
Каждый раз когда вы создаёте воина или героя во время загрузки карты, создание занимает некоторое время. Если поместить это создание в инициализацию карты, то можно избавиться от внутриигровых пауз, но карта будет загружаться дольше. Если вы хотите избежать таких лагов, то поместите небольшой ролик перед игрой. Тогда игроки не заметят внутриигровых пауз или большого времени загрузки.

Б. Массивное количество кода.
Если при инициализации карты выполняется много кода, то это может значительно замедлить загрузку карты. Выполнив некоторую часть этого кода во время ролика в начале игры может сделать процесс более быстрым.

В. Загрузка карты.
Другие игроки могут лагать из-за размера вашей карты. Если размер вашей карты Большой или Огромный, то можно добавить время загрузки сразу после старта игры, тогда игроки смогут выдержать мощный поток на их компьютерах. (Подобное я видел в Vengeance RPG)

2. Лаги во время игры. Во время игры ваша карта лагает всё больше? Этому может быть несколько причин:

А. Утечки памяти.
Знаете ли вы, что каждый раз, используя "Pick every Unit in..." или "Create Units at Location", вы создаёте утечку памяти? Это основная причина лагов во время игры. Многие переменные вызывают утечки, например: точки, отряды, группы игроков, спецэффекты, молнии, плавающие тексты, таймеры и.т.д.
Чтобы обойти эти утечки стороной, занесите утечный тип в переменную, затем используйте строки Custom Script(Jass), чтобы избавиться от утечки.



Первый шаг - определить типы всех значений, которые вы можете изменить. В этом триггере я использовал 1 (Целочисленная), Пехотинец (Тип боевой единицы), Игрок 1 (Красный) (Игрок), Position of(Entering unit) (Точка), Entering unit (Боевая единица) и Стандартная ориентация зданий (Реальная).
Следующий шаг - определить, какие типы переменных утечны.

1 (Целочисленная) = Целочисленные не вызывают утечек.
Footman (Тип боевой единицы) = Типы боевой единицы не вызывают утечек
Player 1 (Red) (Игрок) = Игроки не вызывают утечек
Position of (Entering unit) (Точка)= Точки ВЫЗЫВАЮТ УТЕЧКИ.
Entering unit (Unit)= Войска не вызывают утечек
Default buliding facing degrees (Real) = Реальные не вызывают утечек

Как можно увидеть выше, я нашёл переменную, которая вызывает утечки, моя переменная-точка.
Итак, нам нужно занести во временную переменную эту точку ПЕРЕД созданием воина, затем использовать эту переменную в создании воина.



Теперь утечка записана в переменной и можно её удалить. Каждая утечная переменная имеет действие уничтожения, запомните эти линии:

Custom script: call RemoveLocation (udg_*Temp variable name here*)
Custom script: call DestroyGroup (udg_*Temp variable name here*)
Custom script: call DestroyForce (udg_*Temp variable name here*)
Custom script: call DestroyEffect (udg_*Temp variable name here*)
Custom script: call DestroyLightning (udg_*Temp variable name here*)
Custom script: call DestroyTextTag (udg_*Temp variable name here*)
Custom script: call DestroyTimer (udg_*Temp variable name here*)


Для спецэффектов Blizzard уже создала триггерное уничтожение:

Special Effect - Destroy (Last created special effect)

Вы должны следить за хитрыми утечками, например двойные точки.



Может показаться, что здесь одна единственная утечка. Но это не так. Их две - Position of (Entering unit) вызывает утечку, но также создаёт точку в дистанции от себя, а эта точка тоже вызовет утечку. Нужно позаботиться о двух точках.



Ещё один тип переменной, который вызывает утечки - область, но она вызывает утечки только в том случае, если это не область по умолчанию (Playable Map Area) или уже поставленная на карте область (Region XXXX <gen>), эти типы утечек не вызывают. Существует линия кода, которая позволяет уничтожить этот вид утечки:

Custom script: call RemoveRect(udg_*Temp variable name here*)

Вот, как выглядит утечная область:



Как вы заметили, это создаёт регион (Всё, что не было сразу поставлено на карту, вызывает утечки), а также ТОЧКУ. Этот лаг убирается так же, как и двойные точки - присвойте отдельную переменную каждой утечной строке и уничтожьте их.

Скорее всего, вы тоже создаёте лаги, если используете локальные переменные, типы которых наследуются от handle.

Если оставить переменной, тип которой наследуется от handle, значение, это вызовет утечку точно так же, как и при неуничтожении. Чтобы это исправить, следует обнулить переменную.
От handle наследуются все типы переменных, кроме boolean, integer, real, и string.

A handle variable includes every single type of variables, except boolean, integer, real, and string. Итак, если у вас есть функции, которые начинаются так:

local VARIABLETYPE NAME

Это создание локальной переменной, и если это не integer, real, string, или boolean, то её нужно обнулить следующим образов:

set NAME = null

Однако, есть несколько исключений:
- Если вы не хотите навсегда очистить локальную переменную, то нет смысла её обнулять. Например, триггеры почти никогда не уничтожают.
- Игроки - это второе исключение из правила, они утечек не вызывают, их нельзя уничтожить, соответственно, можно их не обнулять.

В. Триггерные способности.
Это в основном последняя причина лагов, т.к. большинство лагов может быть исправлено путём удаления утечек. Однако, есть и исключения:
- Лаги могут быть не только из-за утечек, но и из-за вызванных триггерами способностей.
- Если способность использует триггер с периодическим событием, у которого маленькое значение (0.05 и ниже), это может спросоцировать лаги.
Ниже даю вам советы, чтобы сделать вашу карту как можно менее лагающей.

• Избегайте периодических событий настолько часто, насколько это возможно. Если не нужно его использовать, то не используйте его.
• Используйте способности с периодическим событием только для войск, которых мало на карте, например для героев.
• Попробуйте перевести способность в код и оптимизировать её.
• Избегайте большого количества спецэффектов, используйте юнитов-дамми как замену.
• Используйте ненамного большое время при периодическом событии, лучше использовать интервал 0.03-0.05, чем 0.02-0.01. Человеческий глаз разницы не видит.

Г. Большое кол-во объектов.
Попробуйте уменьшить кол-во войск, декораций и спецэффектов на карте. Вместо того, чтобы ставить сотни воинов, обойдитесь парой сотен. Спецэффекты замените на дамми, так вы облегчите графическое ядро.
Просмотров: 7826 Добавил: Duosora Добавлено: 26 Января 2010 в 13:19:40
Комментариев: 17 |

Всего комментариев: 171 2 »
10 Декабря 2011
17. Артём (sam-art) [Материал]
То, что надо.

16 Августа 2011
16. Asami Kiomoto (zinf) [Материал]
Спасибо автору за хорошую статью. Собрано всё самое главное

14 Мая 2011
Спс, хорошая статья, все ясно и понятно, ни то что у некоторых :)

08 Апреля 2011
Полезно для карт в которых полно триггеров

11 Февраля 2011
13. Andrey (NiZZ) [Материал]
Отлично

01 Января 2011
то что нужно

14 Августа 2010
скажите а тригер " приказать юниту бежать в позицию другого юнита" вызывает утечку?
Ответ: Вызывает.

09 Июня 2010
10. Medium.Forse (Medium_Forse) [Материал]
xxVTYXxx по локалке уже запускают мапу которые весом больше 7.8 мб так что советую уменьшить импорт или попросить когото сжать его

24 Мая 2010
9. князь владимир великий (Князь) [Материал]
спс за статейку

04 Мая 2010
8. Пикула Юрий (PUVer) [Материал]
xxVTYXxx, макс размер карты для игры по батл нэту или локлке 8 мб(на версиях ниже 1.24 - 4 мб)

1-10 11-17
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]

Форма входа
Логин:
Пароль:

Поиск

Случайная картинка

Случайный файл
[10 Мая 2008]
[Карты · Arena]
Eternal War's Isle v2.03 -
В бескрайних водах озера Лордемер, вдали от мирной жизни и цивилизации расположен небольшой остров... Название этого острова давно забыто, а его местность поглотила буйная зелень, захоронив все свидетельства о том, что здесь когда-то кто-то жил, лишь ходят слухи, что там уже много лет ведутся ожесточенные бои героев мира WarCraft...

Новые карты
[07 Февраля 2016]
Переезжаем на другой сайт, господа![Dota]
[18 Октября 2015]
Duel of Gods PreV[Другое]
[18 Октября 2015]
Hero of The Empire v1.18g[RPG]
[17 Октября 2015]
Servant War v1.05[Другое]
[17 Октября 2015]
Age of Vikings Edited v1.6[Другое]
[17 Октября 2015]
Strife of the Champions Beta v1.2[Arena]
[17 Октября 2015]
VirusBoll (rus)[Другое]
[17 Октября 2015]
Exterminators v1[AoS]
[17 Октября 2015]
The Lord Heroes v1.2[Другое]
[17 Октября 2015]
Versus heroe Arena 1.0 AI[Arena]

5 лучших по кол-ву добавленных статей
[ Duosora ] [ 58 ]
[ Messenger ] [ 52 ]
[ Bru ] [ 39 ]
[ Pand@ ] [ 35 ]
[ РеКсАр ] [ 27 ]

Наша кнопка
Warcraft3FT.info - Всё для Warcraft 3 и DotA

Другие варианты

Статистика

Материалы:
Новости: 1010
Файлы: 8668
Статьи: 680
Картинки: 8256
Форум: 30520/954989
Комментарии: 58094
Copyright © 2006 - 2021 Warcraft3FT.info При копировании материалов c сайта ставьте, пожалуйста, активную обратную ссылку на нас • Design by gReeB04ki ©
Хостинг от uCoz