Форум портала о WarCraft Форум портала о WarCraft
порно чат

Вернуться   Форум портала о WarCraft > Вселенная WarCraft > World Editor > Статьи
Регистрация Справка Пользователи Календарь Поиск Сообщения за день Все разделы прочитаны

Ответ
 
Опции темы Опции просмотра
Старый 24.07.2010, 22:16   #1
VAV
Pandora Directive
 
Аватар для VAV
 
Регистрация: 04.09.2002
Адрес: Area 404
Сообщений: 3,611
VAV как роза среди колючек VAV как роза среди колючек VAV как роза среди колючек
Отправить сообщение для VAV с помощью ICQ
По умолчанию Массивы и циклы в обычных и текстовых триггерах

Массивы и циклы в обычных и текстовых триггерах



Для программиста тут нет ничего сложного, но для остальных… Попытаюсь объяснить попроще. Циклы – повторение одного и того же действия несколько раз. В Trigger Editor циклы реализованы не очень удачно. Есть команда for, которая позволит выполнить определенное действие несколько раз. Беда в том, что обычно требуется выполнить не 1 действие, а целую группу.

Команды unit group>>pick every unit in unit group and do action, player group>>pick every player in player group and do action - по сути тоже циклы. Только определенные действия совершабтся столько раз, сколько юнитов или игроков в определенной группе.

Примеры.
Если нужно создать 10 юнитов в определенном регионе – можете использовать команду [For ] a=1 to 10 do : create unit facing angle… И уточняете параметры создаваемого юнита.

Если нужно уменьшить количество жизней у всех юнитов из определенной группы (к примеру у всех юнитов в регионе) на 100 единиц

unit group>>pick every unit in [unit group] and do [action]
[unit group]=unit in
[action]=unit set life of [picked] unit to [value]
//слово picked – значит выбранный. Т.е. по очереди будет взят каждый юнит и с ним произведено действие. В тот момент, когда юнит выбран он становится picked.

[value]=arithmetic: (unit property>>life of [picked] unit )-100

Если требуется произвести более одного действия, то в качестве action в циклах указываете run trigger ignoring condition – запускаете триггер, в котором реализованы не одно, а несколько действий над юнитом.

Пример:
Требуется создать 10 юнитов и каждому из них дать команду идти в определенное место.
Создаете триггер
[trigger]
Event
Condition
Action
Unit>>create facing angle…
Unit>>Issue order to [last created unit] [move] [region] Т.е. по сути это значит создать юнит и дать команду последнему из созданных юнитов (last created unit), т.е. ему двигаться в определенный регион.
Однако этот триггер не имеет события и сам по себе никогда исполняться не будет

В другом триггере делаете строку
For a=1 to 10 do [action]:Run [trigger] ignoring condition
Написанный выше триггер будет исполнен 10 раз.

Существует еще один способ организации цикла:
цикл в виде отдельного триггера. Структкура: сначала изменяется параметр, отвечающий за количество повторений в цикле, затем идут все команды триггера, а в конце – проверка параметра. Пример: нужно создать юнитов так, чтобы все они находились на одной линии, но на некоторм расстоянии друг от друга и дать команду каждому – двигаться в регион.

Создаете глобальную переменную k: integer, которая будет отвечать за число повторений в цикле.

Триггер:
Event
Condition
Action
Set k=k+1
Unit>>create unit facing angle at [position]
[position]=point with offset (точка со смещением) Выбираете определенную точку, а смещение по X:
arithmetic>>100*k, по Y:0.
Unit>>Issue order to [last created unit] [move] [region] If k>9 then else

Т.е. данный триггер будет запускаться до тех пор пока k<10 и при каждом запуске будет сотворяться юнит в определенной точке со смещением, зависящим от параметра k.

Первый юнит появится в точке (X+100,Y), второй (X+200,Y) и т.д. Получатся юниты, постоенные в линию.

Чтобы запустить этот цикл нужно в определенно триггере добавить 2 строки:

------
Set k =0
Run trigger ignoring condition: указанный выше триггер.
--------

Параметр k нужно обнулять после каждого цикла.

Примерно таким же образом можно создавать циклы в ткстовых триггерах. Для этого служат три команды

Loop (начало цикла)
Endloop (конец цикла)
Exitwhen (закончить когда)

Между словами loop и endloop пишите фрагмент, который должен повторяться.
Exitwhen – проверка, когда заканчивать цикл.

Пример
Если есть две локальные переменные k, m:integer
Set k=0
Set m=0

Loop
Set k=k+1
Exitwhen k>10
Set m=m+k
Endloop

К параметру k будет прибавляться по единице, а к параметру m – текущее значение k до тех пор, пока k не станет больше 10. В это время в переменуую m будет записано число 1+2+3+4+…+10

Теперь о массивах.
Массивы – группа переменных, имеющих одно имя и тип, отичающихся индексом. В trigger editor массивы создаются так же как и обычные переменные, только нужно установить флажок array при создании. В текстовых триггерах можно создавать массивы локальных переменных с помощью команды
Local <тип переменных массива> array <название переменных массива>

Применение массивов тесно связзано с циклами.

Пример: если мы хотим сотворить стену огня с помощью спецэффектов. Сотворить то мы ее можем, но вто чтобы ее потом можно было убрать надо каждый язык пламени (спецэффект) поместить в переменную типа special effect. Если языков пламени мало – еще ничего, а если их сотня… Для каждого создавать переменную?

Задача решается с помощью массивов и циклов. Напишу для нормальных триггеров, хотя в custom text это организовать еще проще. На этом принципе сделан огнемет из примера.

Создаем глобальный массив переменных s: array типа special effect, переменная k – будет отвечать за число повторний

[trigger1]
Event
Condition
Action
Set k=k+1
Special effect>>create special effect at point
Эффект – огонь, точка – point with offset: указываете определенную точку, а смещение (50*k, 0)
Set s[k]=last created special effect
If k>9 then do nothing else [run ignorng condition]

В результате выполнения появится горизонтальная стена огня. Каждый из 10 языков пламени (спецэффект) будет помешен в массив s под номером от 1 до 10.

Как теперь убрать эту стену? Нужен второй триггер:

[trigger1]
Event
Condition
Action
Set k=k+1
Special effect>>destroy (s[k])
If k>9 then do nothing else [run ignorng condition]

Запускать триггер нужно двумя строками
Set k=0
Run [trigger1] ignoring condition
(чтобы создать огненную стену)

Set k=0
Run [trigger2] ignoring condition
(чтобы уничтожить стену)

Автор: Sergey
© WC3.RU, 2002-2010 гг
Нашли ошибки и недоработки в статье? Сообщите нам в раздел Поддержки! С уважением, WC3.RU
__________________
Смотри подругому !
VAV вне форума   Ответить с цитированием
Старый 12.08.2010, 14:38   #2
VAV
Pandora Directive
 
Аватар для VAV
 
Регистрация: 04.09.2002
Адрес: Area 404
Сообщений: 3,611
VAV как роза среди колючек VAV как роза среди колючек VAV как роза среди колючек
Отправить сообщение для VAV с помощью ICQ
По умолчанию Ответ: Массивы и циклы в обычных и текстовых триггерах

Другие статьи:

Основы JASS.
JASS - Общие понятия.
Синтаксис JASS.
JASS - Библиотечные функции. Часть 1.
JASS - Библиотечные функции. Часть 2.
JASS - Операторы.
JASS - Выражения
JASS - Комментарии.
JASS - Функции
JASS - Типы
JASS - Заключение.
Faq по созданию рельефа.
Зачем так много триггеров?
Немного об оптимизации кода.
Текстовые триггеры
Создаем простейшие карты (карты для melee)
Событие с переменным периодом.
Познаем триггеры (Triggers)
Познаем регионы (locations)
Познаем переменные...
Отлавливаем двойной клик мышью.
Массивы и циклы в обычных и текстовых триггерах
Локальные переменные в Custom Text
Камеры, спецэффекты, карта, цвета, кэш...
Добавление своих функций в триггеры
Добавление своих моделей и др. в карту
Делаем очень большую карту...
Делаем огнемет.
Улучшенная версия огнемета...
Глюки worldeditor'a
Random с задаваемой вероятностью - аура.
__________________
Смотри подругому !
VAV вне форума   Ответить с цитированием
Ответ


Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +4, время: 19:24.

Design Developed by CompleteGFX
vBulletin® Version 3.6.7.
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Перевод: zCarot