Сейчас 10:29:23 Пятница, 22 ноября, 2024 год
[ x ] Главная ⇒ Форум ⇐ RSS Файлы Cтатьи Картинки В о й т и   или   з а р е г и с т р и р о в а т ь с я


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

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

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
Группа: Проверенные
Сообщений: 266
Награды: 0
Репутация: 305
Блокировки:
Кууул, как раз в ролике лагает, попробую такую шнягу..
 

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

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

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


НУ И ЧТО ТЕПЕРЬ?


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

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

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

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


НУ И ЧТО ТЕПЕРЬ?


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

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

El Psy Congroo
 

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

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

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

MaSerДата: Среда, 17 Февраля 2010, 14:06:09 | Сообщение # 11
Котобог
Группа: Стримеры
Сообщений: 3574
Награды: 13
Блокировки:
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 уровень
Группа: Проверенные
Сообщений: 2163
Награды: 2
Репутация: 267
Блокировки:
Еще вопрос. Например триггер на воскрешение трупа:
события: боевая единица - 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 уровень
Группа: Проверенные
Сообщений: 133
Награды: 0
Репутация: 59
Блокировки:
Arius, делай через локальные переменные:

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



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

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


El Psy Congroo
 

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


НУ И ЧТО ТЕПЕРЬ?


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

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

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

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


проклятье ляжет на любого
кто дочитает до конца
нет не дочитывай не надо
остановись ну всё капец
 

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

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

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

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

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

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

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


база паролей: https://yadi.sk/d/mdDhWuvPcTSKw
бекап сайта от 26.12.2010 https://yadi.sk/d/L3xNpibbiHpYE
 

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

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

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


НУ И ЧТО ТЕПЕРЬ?


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

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

база паролей: https://yadi.sk/d/mdDhWuvPcTSKw
бекап сайта от 26.12.2010 https://yadi.sk/d/L3xNpibbiHpYE
 

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

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

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


О нас думают плохо лишь те, кто хуже нас, а те кто лучше нас... Им просто не до нас.
My Project: Nindogatari
MAL
 

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

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

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

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

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

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

 

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


НУ И ЧТО ТЕПЕРЬ?


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

  • Страница 1 из 3
  • 1
  • 2
  • 3
  • »
Поиск:

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