Сейчас 12:46:25 Четверг, 5 апреля, 2012 год
[ x ] Главная ⇒ Форум ⇐ RSS Файлы Cтатьи Картинки В о й т и   или   з а р е г и с т р и р о в а т ь с я


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 3123»
Модератор форума: PUVer, FkoFF, Kartoha, SirNikolas 
Форум о Warcraft 3 » Раздел для картостроителей » Раздел картостроителя » [СТАТЬЯ] Уменьшение лагов в карте
[СТАТЬЯ] Уменьшение лагов в карте
[DUОS]Дата: Понедельник, 11 Январь 2010, 21:22:09 | Сообщение # 1
Codepecker
Группа: Ветераны
Сообщений: 6170
Награды: 9
Репутация: 1626
Блокировки:
Как уменьшить лаги.

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

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

Г. Большое кол-во объектов.
Попробуйте уменьшить кол-во войск, декораций и спецэффектов на карте. Вместо того, чтобы ставить сотни воинов, обойдитесь парой сотен. Спецэффекты замените на дамми, так вы облегчите графическое ядро.


Пускай память о светлом прошлом станет символом светлого будущего!
-----------------------------------------------


Кликайте на дракошку ;)
 

AkvariumДата: Понедельник, 11 Январь 2010, 21:45:07 | Сообщение # 2
8 уровень
Группа: Проверенные
Сообщений: 581
Награды: 1
Репутация: 87
Блокировки:
[DUОS], хорошая и полезная статья.

 

sAinessДата: Понедельник, 11 Январь 2010, 23:45:18 | Сообщение # 3
6 уровень
Группа: Проверенные
Сообщений: 195
Награды: 0
Репутация: 195
Блокировки:
Кууул, как раз в ролике лагает, попробую такую шнягу..
 

AriusДата: Вторник, 12 Январь 2010, 08:16:58 | Сообщение # 4
10 уровень
Группа: Проверенные
Сообщений: 2214
Награды: 2
Репутация: 138
Блокировки:
Хорошая статья
 

[DUОS]Дата: Вторник, 12 Январь 2010, 15:49:23 | Сообщение # 5
Codepecker
Группа: Ветераны
Сообщений: 6170
Награды: 9
Репутация: 1626
Блокировки:
Рад, что всем понравилось.

P.S.: Перевод статьи с WET.


Пускай память о светлом прошлом станет символом светлого будущего!
-----------------------------------------------


Кликайте на дракошку ;)
 

KaptainДата: Вторник, 12 Январь 2010, 16:20:21 | Сообщение # 6
3 уровень
Группа: Пользователи
Сообщений: 70
Награды: 0
Репутация: 53
Блокировки:
а самому написать слабо?)
 

[DUОS]Дата: Вторник, 12 Январь 2010, 16:32:33 | Сообщение # 7
Codepecker
Группа: Ветераны
Сообщений: 6170
Награды: 9
Репутация: 1626
Блокировки:
Kaptain,
Quote (Kaptain)
а самому написать слабо?)

Не раз писал авторские статьи. Но сейчас увлекаюсь переводами.

Пускай память о светлом прошлом станет символом светлого будущего!
-----------------------------------------------


Кликайте на дракошку ;)
 

DragoNДата: Вторник, 12 Январь 2010, 18:05:21 | Сообщение # 8
Инквизитор
Группа: Ветераны
Сообщений: 3954
Награды: 6
Репутация: 2077
Блокировки:
подгони немного картинка,что бы форум не колбасило



(╮°-°)╮┳━━┳ Взял стол.
( ╯°□°)╯ ┻━━┻ И устроил дебош!
 

HukoДата: Вторник, 12 Январь 2010, 22:45:15 | Сообщение # 9
7 уровень
Группа: Проверенные
Сообщений: 465
Награды: 0
Репутация: 211
Блокировки:
[DUОS], спасибо, очень полезная и информативная статья.

Помогаю новичкам в Картостроении
Полезные Наработки
 

AriusДата: Среда, 17 Февраль 2010, 13:16:08 | Сообщение # 10
10 уровень
Группа: Проверенные
Сообщений: 2214
Награды: 2
Репутация: 138
Блокировки:
Каким способом можно проверить устранилась ли утечка?
 

MaSerДата: Среда, 17 Февраль 2010, 14:06:09 | Сообщение # 11
Котобог
Группа: СуперМодераторы
Сообщений: 2888
Награды: 8
Репутация: 1052
Блокировки:
Quote (|DUОS|)
Г. Большое кол-во объектов. Попробуйте уменьшить кол-во войск, декораций и спецэффектов на карте. Вместо того, чтобы ставить сотни воинов, обойдитесь парой сотен. Спецэффекты замените на дамми, так вы облегчите графическое ядро.

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

Слк больше не в моде, какая боль.
 

LeGioNДата: Четверг, 18 Февраль 2010, 11:25:23 | Сообщение # 12
3 уровень
Группа: Пользователи
Сообщений: 45
Награды: 0
Репутация: 3
Блокировки:
Благодарю за статью, очень полезная

Чем это воняет? о_О А! Это наши войска!
 

AriusДата: Четверг, 18 Февраль 2010, 14:39:13 | Сообщение # 13
10 уровень
Группа: Проверенные
Сообщений: 2214
Награды: 2
Репутация: 138
Блокировки:
Еще вопрос. Например триггер на воскрешение трупа:
события: боевая единица - A unit умирает
действия:
1)set variable, P = position of (dying unit),
2)wait 20 sec.
3)боевая единица - create 1 unit type of dying unit for owner of dying unit at P facing ...ну там не важно
и потом удаление позиции умершего, а проблема в том что на карте постоянно умирают мобы, и срабатывает этот триггер который записывает позицию умершего, а как известно одной переменой точки несколько позиций присвоить нельзя, то есть юнит воскресится на месте последнего умершего как быть? Такая ситуация возникает во многих триггерах
 

DiR94Дата: Четверг, 18 Февраль 2010, 20:10:41 | Сообщение # 14
5 уровень
Группа: Проверенные
Сообщений: 136
Награды: 0
Репутация: 59
Блокировки:
Arius, делай через локальные переменные:

А в остальных триггерах делай так же. Чтобы узнать как в джассе выглядит какое-либо действие, создай отдельный триггер, в нем сделай единственное действие и переведи в код.
PS: типы локальных переменных



Сообщение отредактировал DiR94 - Пятница, 19 Февраль 2010, 17:17:54
 

DragoNДата: Четверг, 18 Февраль 2010, 21:47:01 | Сообщение # 15
Инквизитор
Группа: Ветераны
Сообщений: 3954
Награды: 6
Репутация: 2077
Блокировки:
DiR94, локалку не обнулил
добавь под конец
set p = null
глобалки обнулять не надо)



(╮°-°)╮┳━━┳ Взял стол.
( ╯°□°)╯ ┻━━┻ И устроил дебош!
 

[DUОS]Дата: Пятница, 19 Февраль 2010, 00:41:00 | Сообщение # 16
Codepecker
Группа: Ветераны
Сообщений: 6170
Награды: 9
Репутация: 1626
Блокировки:
DiR94,
Для одного юнита CreateNUnitsAtLoc не в моде как-то :)

Пускай память о светлом прошлом станет символом светлого будущего!
-----------------------------------------------


Кликайте на дракошку ;)
 

H_A_PKДата: Пятница, 19 Февраль 2010, 08:43:16 | Сообщение # 17
Учитель класса "В"
Группа: Проверенные
Сообщений: 2280
Награды: 1
Репутация: 679
Блокировки:
Quote (DiR94)
Затем смотрите содержание этого файла при помощи блокнота. Находите пункт
//* Global Variables

Зачем в блакноте открывать ? просто делаем нарошно ошибку в коде, он тыкает нас на ошибку, и мы смотрим в этом окошки весь код карты, в самом верху объявлены глобалки )

Добавлено (19-02-2010, 08:43)
---------------------------------------------
DiR94,
wait = ужазная функция угу -_-.
[DUОS], выложи таймер :)


 

DiR94Дата: Пятница, 19 Февраль 2010, 17:17:27 | Сообщение # 18
5 уровень
Группа: Проверенные
Сообщений: 136
Награды: 0
Репутация: 59
Блокировки:
[DUОS], в джассе не силен, в стандартных триггерах нет функции для создания одного юнита, а эту функцию я узнал именно переводом Create Units Facing Angle :)
H_A_PK, других способов выжидания времени не знаю ^_^
Quote (H_A_PK)
Зачем в блакноте открывать ? просто делаем нарошно ошибку в коде, он тыкает нас на ошибку, и мы смотрим в этом окошки весь код карты, в самом верху объявлены глобалки )

ну так если ты дочитал бы спойлер, там про этот способ тоже написано ;)
Dragon93, теперь обнулил :)
 

AriusДата: Понедельник, 22 Февраль 2010, 23:17:16 | Сообщение # 19
10 уровень
Группа: Проверенные
Сообщений: 2214
Награды: 2
Репутация: 138
Блокировки:
DiR94, спасибо, просто в жассе не смыслю...
 

ЭллесарДата: Суббота, 27 Февраль 2010, 18:29:16 | Сообщение # 20
DeMoN
Группа: Ветераны
Сообщений: 915
Награды: 1
Репутация: 147
Блокировки:
Сама посебе CreateNUnitsAtLoc кривая функция использовать надо CreateUnit.

Quote (|DUОS|)
Большое кол-во объектов.
Попробуйте уменьшить кол-во войск, декораций и спецэффектов на карте.

Это да... создают большие тормоза...

Ещё бы написал бы об использование ->" Выбрать каждого юнита"

 

[DUОS]Дата: Суббота, 27 Февраль 2010, 18:34:57 | Сообщение # 21
Codepecker
Группа: Ветераны
Сообщений: 6170
Награды: 9
Репутация: 1626
Блокировки:
Quote (Эллесар)
Сама посебе CreateNUnitsAtLoc кривая функция использовать надо CreateUnit.

Всё дело в том, что оно возвращает как группу так и последнего созданного юнита... Добавить бы в GUI CreateUnit() :)
Quote (Эллесар)
Это да... создают большие тормоза...

Согласен.
ЗЫ: Кинул тебе запрос авторизации в асю)

Пускай память о светлом прошлом станет символом светлого будущего!
-----------------------------------------------


Кликайте на дракошку ;)
 

ЭллесарДата: Суббота, 27 Февраль 2010, 18:40:39 | Сообщение # 22
DeMoN
Группа: Ветераны
Сообщений: 915
Награды: 1
Репутация: 147
Блокировки:
суда ? 394610403
 

FaionДата: Пятница, 21 Май 2010, 20:05:13 | Сообщение # 23
10 уровень
Группа: Проверенные
Сообщений: 1528
Награды: 0
Репутация: 408
Блокировки:

В этом месте создается группа юнитов которая впоследствии создает утечку, или нет?

Прикрепления: 3208303.jpg(70Kb)


I'm Will of the Abyss...
My Project:
Naruto - SNW
Hope you release your map Soon can't wait it's so LEGENDARY © Miniewee
MAL
 

Banzay89Дата: Пятница, 21 Май 2010, 20:21:34 | Сообщение # 24
9 уровень
Группа: Проверенные
Сообщений: 841
Награды: 1
Репутация: 68
Блокировки:
Да, статья полезная, всем новичкам читать обязательно!
Еще есть такой прикол:

call DoNotSaveReplay() при инициализации карты

Освобождает вар от такой рутинной работы, как запись реплеев в даной карте, тем самым бросив все силы вара на обработку кода и прочего

Добавлено (21-05-2010, 20:21)
---------------------------------------------

Quote
В этом месте создается группа юнитов которая впоследствии создает утечку, или нет?

Если до этого не забить этих юнитов в группу, то создает

 

[DUОS]Дата: Суббота, 22 Май 2010, 22:06:19 | Сообщение # 25
Codepecker
Группа: Ветераны
Сообщений: 6170
Награды: 9
Репутация: 1626
Блокировки:
Faion,
Перед "Количество юнитов в группе" напиши джассом set bj_wantDestroyGroup = true

Пускай память о светлом прошлом станет символом светлого будущего!
-----------------------------------------------


Кликайте на дракошку ;)
 

Форум о Warcraft 3 » Раздел для картостроителей » Раздел картостроителя » [СТАТЬЯ] Уменьшение лагов в карте
Страница 1 из 3123»
Поиск:

Copyright © 2006 - 2012 Warcraft3FT.info При копировании материалов c сайта ставьте, пожалуйста, активную обратную ссылку на нас • Design by gReeB04ki ©