Многие картоделы задаются вопросом "Стоит ли переходить на Jass2(в народе просто jass)?", в противовес ставят ответ "У меня и на ГУИ все получается что я хочу!".
Аргумент конечно веский, однако стоит рассмотреть перспективу перехода на джасс более детально. Давайте сравним все плюсы и минусы
Плюсы GUI:
• Легкость восприятия для новичков
• Невозможно допустить синтаксическую ошибку (исключительно логические)
• Наглядность
Минусы GUI:
• Недоступные по умолчанию локальные переменные
• Скорость работы на порядок ниже
• Ограниченный функционал
• Очень высокая в сравнении с Jass2 ресурсоемкость.
Плюсы Jass2:
• Возможность создавать новые функции
• Возможность упрощать действия
• При правильном использовании вызывает минимальное количество утечек либо не вызывает утечек вообще
Минусы Jass2:
• При отсутствии опыта легко допустить синтаксическую ошибку
• Тяжел для восприятия новичками
Но покамест это только слова. Следует так же объяснить на примере смысл вышеописанного.
При создании заклинания вы в 90% случаев используете условия. Самые классические это:
Здоровье (unit) больше 0 (или то же самое действие через Boolean: Is Unit Alive)
Is (unit) is allie of (player)
Unit is здание\герой
При подобном наборе условий внутри триггера (допустим в ифзене или хуже того - в pick every unit) создается отдельная функция с if\then\else массивом внутри. Каждый раз когда вы будете использовать в триггере эти условия - будет создаваться отдельная функция.
Еще хуже когда вы используете AND \ OR логические операции на гуи. В таком случае будет создан блок функций - Количество сравниваемых условий + количество использованных AND\OR'ов.
И, в триггере на движение снаряда с проверкой на наличие рядом юнитов и нанесение урона случайному юниту количество подобных функций будет очень и очень большим.
В Jass2 подобных проблем не существует благодаря тому что вы можете один раз написать условие и в последствии вызывать к нему из любой строчки триггера. Помимо этого можно так же облегчить сам процесс обработки, удалив лишние или ненужные строки, заменив десяток лишних функций одной строкой (пусть большой) - кода, без лишних переходов из одного к другому.
Во первых - это значительно ускорит процесс работы триггера
Во вторых - это значительно облегчит сам код.
Более того, вы можете вписать данное условие в Custom Code карты (самый верхний триггер с иконкой свитка) - и вызывать его из всех своих триггеров ниже.
Тоесть сделать несколько различных функций подходящих под самые распространенные параметры и в последствии, вместо того что бы переписывать одинаковые условия для всех ваших триггеров - можно будет просто вызывать условие из функции записанной в Custom Code.
Это так же касается всего что только можно вообразить. В том числе и движение снарядов. Представьте что достаточно написать один раз нужный набор действий (чистый, без утечек) и в последствии нужно будет лишь вписать к примеру call MoveUnitToUnit(GetTriggerUnit(), GetSpellTargetUnit(), скорость, максимальная дистанция)
С появлением хэша вопрос создания триггерных систем вообще практически пропал, потому как теперь можно практически любые параметры прикреплять к таймеру, а соответственно нет вопроса создания отдельных триггеров и глобальных переменных для переноса значений из одной функции в другую. Конечно несколько глобальных переменных всеравно потребуется но в основном для переноса данных из локальной переменной в условие и обратно.
Ну и самый основной плюс Jass2 в отличии от GUI это возможность создавать безутечный\практически безутечные функции.
Вы думали что call RemoveLocation(lochandle) действительно убирает утечку? К сожалению это ложь. Как бы то ни было - локации все равно отсаются в памяти и засоряют её. Ну и, конечно же, можно вообще практически не использовать хэндлы.
Перспективы перехода на Jass2
После перехода на Jass2 и его модификации (vJass \ cJass ) вам откроются практически безграничные возможности в плане систем и наработок. Хоть воздушные бои с самонаводящимися снарядами, хоть весь учебник физики с рычагами и силой притяжения. Все что угодно можно реализовать на джасс, однако для подобных вещей требуется незаурядное знание методов вычисления и алгебры.
Однако стоит отметить что на GUI подобные вещи фактически не реализуемы. Переход на Jass действительно дает возможность перевести вашу карту на совершенно другой уровень, практически выпрыгнуть за пределы движка варкрафта.
Ну и для тех, кого эта статья убедила перейти на джасс очень рекомендую скачать программу [Jass Craft].
Данная программа - отличный инструмент для написания кода, тем более для новичка.