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

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

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

Зачем так много триггеров?



В этой статье речь пойдет о возможности перекрестного использования кода в скриптах - т.е. как использовать в одном триггере внутренние функции другого и создавать несколько триггеров в одном. Сначала расскажу, как редактор воспринимает скрипт:

- Скрипт разделяется на разделы (каждый триггер в редакторе записывается в отдельный раздел, когда триггер переводится в текст, он тоже занимает один раздел), которые все мапперы воспринимают как 'триггеры'. Когда говорят 'я сделал новый триггер', надо это воспринимать 'я сделал новый раздел'. Триггеры как было сказано ранее - это обычные переменные, а разделы можно представить как контейнеры, к которых хранятся функции триггера.

- Редактор разделяет все переменные на два класcа: gg_ и udg_ (см. первую статью), причем в окне редактирования переменных можно создавать / изменять / удалять только udg_ переменные (переменные, созданные пользователем).

- Если первый триггер расположен до второго, то из второго нельзя вызвать какую-нибудь функцию, записанную в разделе первого. Хотя с точки зрения языка JASS - это возможно.

В статье речь пойдет о том, как избежать третьего пункта. Есть только два способа:
- Вручную редактировать ВЕСЬ скрипт, не используя WE.
- Совместить несколько триггеров в один раздел - тогда последующие функции смогут использовать вызовы предыдущих (но не наоборот). А это открывает большие возможности - например, если есть несколько триггеров с оинаковыми условиями, то их можно записать в один и сделать общее условие и т.д. Те, кто пишет скрипты, обычно используют много своих функций - тогда такой способ будет еще полезнее - не надо переписывать функцию по сто раз для каждого триггера.

Реализовать идею совмещения можно несколькими способами, которые принципиально ничем не отличаются.

Первый способ такой - создаем в редакторе переменных несколько переменных типа 'триггер'. Создаем новый триггер, переводим в текст и в его функции инициализации добавляем инициализацию для пустых триггеров-переменных. Функции условия / действия этих триггеров пишем здесь же. В результате получается карта, состоящего из ОДНОГО раздела, в котором собраны много триггеров. Новичок, посмотревший на карту, которая работает на одном 'триггере', будет в шоке

Пример:

Мы создали в редакторе переменные InitTrig и WorkTrig типа trugger. Затем в редакторе создаем триггер (конечно, правильнее сказать, раздел) с названием BagTrig, затем переводим его в текст. В результате у нас есть один пустой текстовый триггер с названием BagTrig. Теперь пишем в него функции инициализации двух триггеров-переменных:

// Здесь описываются рабочие функции триггеров одна за
// другой Можно писать в любом порядке, главное - чтобы
// вызов функции был после ее определения.

function Trig_InitTrig_Condition takes nothing returns boolean
//
// ............................
//
endfunction

....

function Trig_WorkTrig_Actions takes nothing returns nothing
//
// ............................
//
endfunction


function Trig_BagTrig_Init takes nothing returns nothing

// Сюда пишем инициализацию остальных триггеров.
// Т.к. переменную сделали в редакторе, то она будет udg_

call CreateTrigger(udg_InitTrig)
call CreateTrigger(udg_WorkTrig)

// Здесь пишем функции регистрации событий, условий и
// действий для этих триггеров. Все функции мы описали
// до этого.

endfunction

Вообще несколько триггеров в одном разделе лучше писать так:

1. Общие функции.
2. Функции - условия.
3. Функции действия.
4. Функции динамической инициализации (если надо).
5. Статическая инициализация триггера (-ов).

В результате мы сделали три триггера в одном разделе! Причем все предыдущие функции видны их последующих. Это главное преимущество - можно сделать кучу триггеров, используя общие функции - и удобно и объем кода гораздо меньше.

Второй способ - все аналогично, но используем gg_ триггеры: создаем несколько триггеров, затем переносим их код в один. Если стереть пустые триггеры, редактор сотрет их определение из Globals. Поэтому оставляем только функцию инициализации, но пустую - редактор в этом случае оставит определение. Типичный пример такого использования был уже выложен (событие с переменным периодом) - там использовано два пустых триггера как раз для этих целей.

Автор: Caсоdemon
© WC3.RU, 2002-2010 гг
Нашли ошибки и недоработки в статье? Сообщите нам в раздел Поддержки! С уважением, WC3.RU
__________________
Смотри подругому !
VAV вне форума   Ответить с цитированием
Старый 12.08.2010, 14:39   #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, время: 17:52.

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