Сейчас 18:09:04 Четверг, 17 июля, 2014 год
Главная ⇒ Форум ⇐ RSS Файлы Cтатьи Картинки В о й т и   или   з а р е г и с т р и р о в а т ь с я

Меню сайта

Категории

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

Сейчас на сайте
На сайте всего: 44
Гостей: 40
Пользователей: 4

Реклама

Главная » Статьи по 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. Человеческий глаз разницы не видит.

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

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

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

14 Май 2011 Спам
15. Шейд (DARK_LORD_SHADE)
Спс, хорошая статья, все ясно и понятно, ни то что у некоторых :)

08 Апрель 2011 Спам
14. shift (shift2501)
Полезно для карт в которых полно триггеров

11 Февраль 2011 Спам
13. Andrey (NiZZ)
Отлично

01 Январь 2011 Спам
12. Ph0enIx ([GOD]™)
то что нужно

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

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
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]

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

Поиск

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

Случайный файл
[06 Ноябрь 2009]
Крушитель -
Эти самураи составляют элиту армии Нерзула. Этим существам нет равных на поле боя, один такой самурай может запросто вынести целый отряд.

Импортируемые текстуры:
-HeroUndeadMaster.blp

Иконка прилагается.

Автор: Totoro


Новые карты

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

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

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

Статистика

Материалы:
Новости: 1022
Файлы: 8309
Статьи: 763
Картинки: 8210
Форум: 29850/972173
Комментарии: 58229
Copyright © 2006 - 2014 Warcraft3FT.info При копировании материалов c сайта ставьте, пожалуйста, активную обратную ссылку на нас • Design by gReeB04ki ©