Главная » Статьи » Создание карт » Триггер (GUI) Редактор Учебники

[Jass] Для новичков

25-12-2024АХТУНГ!!! - ПЕРЕД ТЕМ КАК НАЧАТЬ ЧИТАТЬ СКАЧАЙТЕ ЭТО!
Скачать программу для подсвечивания синтаксиса - JNGP
Для начала разберём что такое Jass и GUI
JASS - Just Another Scripting Syntax, событийно-ориентированный скриптовый язык программирования, созданный компанией Blizzard Entertainment (wiki), проще говоря язык программирования в WarCraft III.
GUI - Graphical User Interface, графический интерфейс пользователя. Это триггеры, не переведенные в текст (wiki), тут уже некуда проще, всё понятно это триггеры которые мы любим клацать.
А теперь следует вопрос, чем же различаются эти 2 языка?
Давайте возьмем 2 карты на GUI и на JASS, что мы увидим через 30 минут игры в карту со 100 триггерами GUI - карта будет лагать, при касте скилов карта будет виснуть на 2-3 секунды. А теперь на JASS - карта будет стабильно работать. Почему?
Потому-что в GUI мы используем глобальные переменные (udg) эти переменные с каждым использованием способности заносятся в переменную, которая не будет очищаться и будет всё больше и больше нагружать карту. Ну хотя можно обойтись и без них, но тогда эффект будет другой.
Теперь мы немного разобрались чем плох GUI, перейдём к изучению Jass.
Все GUI'шники,ленивые, считают что Jass это непостижимый скрипт доступный только богам! Но на самом деле всё куда проще! Давайте рассмотрим такую функцию.

И на Jass

И Нормальный вариант на Jass

Чем они различаются? для того чтобы создать юнита в 1-ом и во 2-ом случае мы задействуем локацию, это уже не хорошо. И все BJ функции утечны. И все требуют своего раскрытия, в случае 3-ем мы раскрыли BJ и создали футмана на центре карты, для 1-ого игрока.
Теперь перейдём к local(локальным переменным).
Разберём чем же, так хороши эти локальные переменные.
local задействуются только в ток триггере, в котором они написаны в других триггерах они будут недоступны. Они легко вызываются и так же легко удаляются из памяти.
Давайте попробуем создать локального футмана в центре карты.

Этот вариант создания футмана, но можно сделать чуточку проще.

Таким образом мы сразу объявили local unit footman и объявление равно, созданию юнита на центре карты в поворотом 0, для красного игрока.
Но теперь встаёт вопрос как-же создать несколько футманов? Копировать по много раз call CreateUnit()?
Нет для этого у нас есть функция loop'а, рассмотрим как создать 3 футмана для красного игрока на центре карты.

Рассмотрим по шагово:
1.local integer i = 0
это наша локальная i, она нужна нам для пересчёту юнитов, ну вы поняли.
2.loop
Начала цыкла.
3.exitwhen i == 3
это наше условие выходи из loop'а
4.local unit footman = CreateUnit(Player(0),'hfoo',0,0,0)
Всё понятно, создаём юнита.
5.set i = i + 1
устанавливаем нашу переменную i = i + 1, что-бы достичь значения i = 3, чтобы выйти из loop'a
6.endloop
конец цыкла
7.set footman = null
чтобы не нагружать память очищаем футмана.
Теперь давайте рассмотрим событие и условие.

set gg_trg_Test = CreateTrigger( ) - создаём триггер, gg_trg - триггер, _Test название.
TriggerRegisterTimerEventSingle( gg_trg_Test, 1.00 ) - событие , прошла 1 секунда игры.
call TriggerAddAction( gg_trg_Test, function Trig_Test_Actions ) - после того как прошла 1 сек. к нашему триггеру добавляться действие.
call TriggerAddCondition( gg_trg_Test, function Trig_Test_Condition ) - что-бы наше действие началось выполняться должно пройти условие
Рассмотрим условие.

Наше условие берёт нечего, но возвращает boolean - наше условие.
return GetUnit.... и т.д условие сейчас у нас нету условия.
Сейчас я научу вас конвертировать GUI в Jass, и просматривать как раскрыть BJ функцию для изучения.

Это наша способность на GUI
Теперь переводим её в Jass

После перевода мы видим

Это не оптимизированный вариант и без локальных переменных, что делаем, создаём 2 локальных переменных и делаем нормальное условие.

Теперь как же нам раскрыть call IssueTargetOrderBJ( GetTriggerUnit(), "attack", GetSpellTargetUnit() ), ведь это BJ функия, она утечна, делаем следующее, копируем IssueTargetOrderBJ (только это!!!)

жмём на function list, вставляем IssueTargetOrderBJ, видим следующее

копируем IssueTargetOrder( whichUnit, order, targetWidget ) - теперь разберём IssueTargetOrder( наш юнит, 'приказ', цель )
IssueTargetOrder(u,"attack",t), получаем раскрытую BJ, не утечную что немало важно, функцию.
После чего обнуляем все переменные set u = null и set t = null
Сейчас мы создали триггер после применения молота бурь наш юнит побежит атаковать цель.

Так же мы можем заменить название локальной переменной u на caster например или на любое другое хоть на pedobir разницы нету.
Теперь вы можете поэкспериментировать и попрактиковаться Jass.
Удачи!
© tRu.Style для wc3-maps.ru

Категория: Триггер (GUI) Редактор Учебники | Добавил: НубикВЕ (25-12-2024 в 11:24:17) | Автор: tRu.Style E
Просмотров: 8978 | Комментарии: 10 | Рейтинг: 3.2/9
Всего комментариев: 10
avatar
1 Tiny • 10:49:50, 27-08-2012
УРРРРРА!!!!!Наконец то нашел чтото о джазе спасибо happy ставлю большой плюс
avatar
2 Tapos • 12:58:30, 07-09-2012
Нуб пишет статьи для новичков wacko wacko wacko wacko
avatar
3 tRuStyle • 12:46:54, 10-09-2012
Тапос, фингю спорол...
avatar
4 влад10011 • 17:28:26, 12-09-2012
"и все bj функции утечны."
ересь!
не все они утечны единственное что происходит это "функция в функции" лишь некоторые бж вызывают утечки такие как bjdebugmsg, бж по созданию текст тага, bj создание юнита, случайный юнит из группы и ещё некоторые..
остальные лишь вызывают антологичную нативку
"потому-что в gui мы используем глобальные переменные (udg) эти переменные с каждым использованием способности заносятся в переменную, которая не будет очищаться и будет"
тоже ересь!
если знать функции по удалению такие как DestroyTimer DestroyGroup и тд то можно оптимизировать почти всё
единственное что локальные переменные избавляют нас от точек тк мы сможем использовать XY хранить ссылки на объекты и тд тк при использовании в GUI например "Выбранный юнит" мы получаем ссылку на объект и эта ссылка не удаляется!
а если на юнита ещё остались ссылки, то он не сможет спокойно удалится и будет висеть в памяти
avatar
5 влад10011 • 17:36:05, 12-09-2012
Эта статья самая непонятная и самая ужасная
Люди прочитайте статью Сергея и Адольфа там всё понятно расписано и без ереси(ну у Сергея есть немног но все же понятно)
avatar
6 Каид • 13:20:02, 27-10-2012
wacko
avatar
7 DioN • 16:47:11, 01-12-2012
wacko них... не понял
avatar
8 DarkDaro • 17:37:02, 26-12-2012
омг
avatar
9 Apokalepto • 10:42:16, 05-01-2013
непонятно
avatar
10 zi-cobra • 19:58:49, 04-02-2013
кул
ComForm">
avatar
Рейтинг@Mail.ru
Яндекс.Метрика

Copyright © 2010-2017
Вакансии :: Контакты
Мобильная версия сайта