События в Construct

Events (События) — это визуальный способ определения того, как именно должна работать ваша игра или приложение, в отличие от скриптов Python.

Cобытия создаются в Event Sheet Editor (Редактор Событий), все события принадлежат к спискам событий, так называемым Event Sheets.

Событие состоит из одного или нескольких условий; когда они выполняются — происходят действия.


Хороший способ думать о событиях, как о схеме, показанной на рисунке справа. Когда критерии будут выполнены, запускаются следующие инструкции. При создании простых событий, это то, насколько далеко идет логика. Однако, есть модификаторы логики и исполнения, которые будут описаны чуть ниже.

События

Event Sheet Editor (Редактор событий)

Event Sheet Editor (Редактор Событий) — это главное место разработки функционала для вашего проекта.

В редакторе показывается список событий. Справа располагаются настраиваемые действия, которые запускаются при соблюдении определенных условий. Условия представлены в виде вертикального списка слева от действий. Критерии как для действий, так и для условий могут редактироваться через мастера событий, или прямо на месте.

Читайте также про интерфейс Construct.

Добавление нового события

Дважды кликните на пустом пространстве в редакторе событий, или нажмите ПКМ и выберите опцию Insert event (Вставить событие). Откроется мастер событий, где вы сможете добавить новое событие.

Редактирование на месте

Большинство параметров для действий, условий и выражений можно отредактировать в самом редакторе событий, просто кликнув на них.

Sub Events (Под-события)

Sub Events (Под-события) используются как для организации событий, так и для того, чтобы логически запускать события только после того, как запустились другие. Под-события срабатывают, только если их родительское событие стало правдой. Они запускаются после того, как закончилось выполнение действий родительского события. Кроме того, они наследуют копии объектов, которые были выбраны в условиях родительского события.

Если есть несколько под-событий, каждый из них наследуют свою собственную копию выбранных объектов из родительского события, и может дальше обрабатывать эти объекты самостоятельно (независимо).

Редактор событий наглядно выводит структуру и делает специальные линии и отступы для под-событий.

Пример

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

Событие выполняется в следующем порядке:

  • Столкнулась ли пуля с чужим? Да.
    • Уничтожить пулю.
    • Добавить 1 к приватной переменной 'Damage'.
    • Приватная переменная 'Damage' больше или равна 5?
      • Уничтожить чужого.

При первых четырех попаданиях переменная чужого 'Damage' не будет больше или равна 5, поэтому чужой не уничтожится. При пятом попадании под-событие станет истиной, и чужой уничтожится.

Если бы под-событие было просто отдельным событием, следующим за первым, оно бы имело то же поведение, но было менее эффективным по двум причинам:

  • Оно бы проверялось каждый тик, а не только тогда, когда пуля попала в чужого.
  • Оно бы проверяло каждую существующую в сцене копию объекта 'Alien', вместо только тех копий, которые указаны в родительском событии (в данном случае — одиночный экземпляр, в которого попала пуля).

Это никогда не станет причиной резкого падения FPS, но это то, что надо иметь в виду, если вы будете использовать много циклов. Кроме того, поскольку под-события наследуют объекты, выбранные в родительском событии, вы можете делать события, которые гораздо проще для понимания. Составив ряд под-событий для запуска, например.

Event Sheets (Списки событий)

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

Использование списков событий

Общие случаи использования списков событий включают модуляризацию игр с большим количеством уровней, причем большую часть движка можно разделить на разные списки и подключить в каждом уровне. Чтобы добавить такой, кликните ПКМ в редакторе событий и выберите Include event sheet (Включить список событий). Далее кликните ПКМ на строке и выберите нужный список событий. Также вы можете удалить подключенный список событий (Delete include) или перейти к нему (Go-to include).

Логика событий

События могут использовать логику для создания сложных наборов условий.

Else (еще) срабатывает, если условие (или условия) не выполняются, тогда действия могут быть выполнены на основе этого, так же как и при выполнении критериев.

ELSE вставляется через объект System (Система) при создании нового условия.

OR (или) используется как прослойка между двумя условиями; если одна из сторон выполнилась, запускаются действия. Без OR (ИЛИ) оба условия должны быть выполнены, чтобы запустить событие (т.е. по умолчанию для всех условий поведение AND (И)).

Исполнение событий

События в редакторе событий читаются сверху вниз, каждый тик. Это важно, так как порядок ваших событий может повлиять на конечный результат, а события, которые постоянно являются "истиной" (например, Mouse over Sprite (Мышь наведена на спрайт)) будут повторять свои действия каждый тик.

Условия также выполняются сверху вниз, равно как и действия.

Условия

Conditions (Условия) — очень важная часть того, как работают события. Событие может содержать несколько условий, которые тестируют набор критериев, и если они выполняются, запускается набор действий и под-событий.

Как работают условия

Каждый тик (единожды, каждый раз, когда прорисовывается экран) список событий проверяется сверху вниз. Условия в каждом событии также проверяются в порядке от верхнего к нижнему. В случае, если все условия верны, выполняются действия, затем сверху вниз тестируются под-события и выполняются соответствующие действия.

Большинство игр V-синхронизированы, то есть они рисуются на экране синхронно с частотой обновления дисплея. Большинство пользователей имеют частоту в пределах 60-85 Гц, так что это приблизительные частоты, при которых весь список событий будет работать. Поскольку вы не можете и не должны ожидать определенной фиксированной частоты кадров, смотрите TimeDelta для решения наиболее частых связанных с этим вопросов.

Выбор объектов

У каждого объекта может быть множество копий, и условия будут выбирать (или фильтровать) только те копии, которые соответствуют условию. Например, условие спрайта Is visible? (Видимый ли?) тестирует видимость каждой одиночной копии объекта. Любая из копий, которая невидима, отфильтровывается.

Условия фильтруют копии постепенно, поэтому, если второе условие в событии было Is on layer 1 (На слое 1), то проверяются только копии, которые видны. Из них те, что на слое 1, и выбираются.

Когда запускается действие на этот объект, оно применяется только к выбранным объектам. Если действие в этом событии было Destroy (Уничтожить), то уничтожатся только видимые копии на слое 1.

Используя условия как фильтры, таким образом вы можете построить логику приложения или игры. Иногда перечень объектов, которые выбраны, называется SOL или Selected object list (Список выбранных объектов).

Неиспользуемые объекты

Если условия не выбрали только определенные копии обекта в событии, то действия применяются ко всем копиям объекта. Например, событие Start of Layout > Destroy Sprite уничтожит все копии спрайта, потому что условие не выбрало каких-либо конкретных спрайтов для уничтожения.

Правило Выражения

Выражение Object.X получит X-координату первой копии выбранного объекта. Если объект не используется в событии, выражение обращается просто к первой копии для получения значения. Это стоит иметь в виду. Смотрите примеры ниже для большей информации.

Containers (Контейнеры)

Когда условие выбирает копию, если эта копия принадлежит к контейнеру, оно также берет все остальные связанные с ней копии в этом контейнере. Любые действия, затрагивающие объекты в контейнере, применяются к связанным копиям — они не учитываются как неиспользуемые. Читайте containers для большей информации.

Типы условий

Существуют различные типы условий. Первое условие в событии определяет тип события; событие, начинающееся с оценивающего условия — оценивающее событие, событие, начинающееся со срабатывающего условия — срабатывающее событие, и так далее.

Оценивающие условия

Большинство условий являются оценивающими, это значит, что они тестируются раз в тик, когда запускается список событий. Например, Mouse is over Sprite (Мышь наведена на Спрайт) тестируется каждый тик. Действия в таком событии будут повторяться до тех пор, пока мышь будет на объекте, потому что каждый тик запускаются события, и условие оказывается истинным.

Срабатывающие условия

Срабатывающие условия выполняются (или запускают свои действия и тестируют под-события), когда происходит событие — например, клик мышкой. Срабатывающие условия обозначены специальным значком.

Оценка списка событий игнорирует эти события, поэтому их положение в списке событий не имеет значения, за исключением в отношении других триггеров. Несколько идентичных триггеров (например, 5 событий Mouse clicked (Клик мыши)) срабатывают в порядке сверху вниз. В одном событии не может быть два триггера.

Как только срабатывающе условие запускается, остальные условия в событии тестируются, как обычно, сверху вниз.

Повторяющиеся условия

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

Например, системное условие Repeat 50 times (Повторить 50 раз) будет вызывать действия, которые необходимо сделать, 50 раз вместо одного, и то же самое для под-событий — они будут проверены 50 раз.

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

Вы даже можете иметь несколько повторяющихся условий в одном событии; два условия Repeat 10 times (Повторить 10 раз) в одном событии означают то же, что и Repeat 100 times, так как второе повторение запускается 10 раз первым повторением. Кроме того, вы можете использовать два условия For Each Object (Для каждого объекта) в одном событии для перебора всех возможных сочетаний копий двух объектов.

While (До тех пор, пока)

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

До тех пор, пока спрайт перекрывает "Solid", действие будет повторяться, двигая спрайт вверх на один пиксель. В результате спрайт перемещается над любым твердым, чтобы предотвратить его перекрытие. В конце концов спрайт больше не перекрывает "Solid", условие While (Пока) останавливается, и оценивается уже следующее событие.

For Each (Для каждого)

Системное условие For Each (Для каждого) повторяется один раз для каждой копии объекта. Для каждого повторения берется одна копия объекта. Это полезный способ преодолеть ограничения обычного поведения условий. Смотрите примеры ниже.

Примеры использования

При старте уровня, событие повторяется 100 раз, создавая 100 спрайтов. Каждый спрайт располагается на случайных X и Y координатах. Без условия Repeat (Повторить) создался бы только один спрайт.

Когда нажата левая кнопка мыши, действия повторяются для каждой копии спрайта. Здесь один объект Bubble создается каждой копией Sprite. Без условия For Each (Для каждого) только один объект Bubble был бы создан, когда пользователь кликнул мышкой, и он бы был расположен рядом с первой копией Sprite, согласно Правилу Выражения (читайте выше).

То же самое, только каждым спрайтом создаются 4 объекта Bubble. Обратите внимание на небольшой отступ второго повторяющегося условия — это свидетельствует о вложенности повторений.

Специальные условия

Системное условие Compare Values (Сравнить значения)

Это системное условие примечательно тем, что оно вообще не выбирает никаких объектов. Параметры просто оцениваются как одиночные значения, а затем происходит сравнение. Если это условие используется, чтобы сравнить, например, Object.X equal to 0 (Х объекта равно 0), то согласно Правилу Выражения (смотрите выше), будет получена X-координата первой (или первой выбранной) копии Объекта, потом произойдет сравнение, и затем будет получен простой истинный или ложный результат. Никакие объекты не выбираются. Если это событие содержит действие Destroy Object (Уничтожить объект), согласно правилу, если нет конкретно выбранных объектов, значит все объекты будут уничтожены, независимо от их X-координаты.

По этой причине предпочтительнее использовать собственные условия сравнения объекта — объект Sprite (Спрайт), впрочем как и многие другие, имеет условие Compare X co-ordinate (Сравнить X-координату). Условия объектов сами тестируют и выбирают соответствующие копии, а системное условие Compare Values (Сравнить значения) — нет.

Использование условия For Each (Для каждого) над условием Compare Values (Сравнить значения) позволяет вам проверить сложное выражение, включающее выбор объектов, так как при каждом повторении выражение применяется к копии, выбранной в данный момент.

Системное условие Always (Всегда)

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

Пустые события

Можно удалить все условия из событий, оставив пустую область, это добавит просто лишнее условие, так же, как и в случае с Always (Всегда): всякий раз, когда это событие оценивается, оно сразу же запускает действия и тестирует под-события. Это может быть полезно, если у вас есть событие с большим количеством под-событий, и вы хотите, чтобы действия запускались после того, как протестированы все под-события.

Действия

Actions (Действия) выполняют различные задачи с объектом, такие как выстреливание пули или уменьшения здоровья. Действия в событии запускаются в порядке сверху вниз, когда все условия стали истиной. Часто действие имеет ряд параметров, которые вы заполняете в выражении, чтобы предоставить информацию о том, что нужно делать. Например, Add to private variable (Добавить к приватной переменной) требуется только один параметр — число, которое нужно добавить к переменной.

Действия могут быть добавлены к событиям в редакторе событий. Также как события и условия, действия можно вырезать, копировать и вставлять, перетаскивать в другие события, или копировать, зажимая Control.

Выражения

Про выражения в Construct читайте в статье Выражения.

Параметры

Параметр — это любая информация, которая требуется действию, условию или выражению, чтобы выполнить свою работу. Например, системное действие Scroll to X (Прокрутка по Х) имеет один параметр — X-координату. Если какому-либо добавленному элементу требуются параметры, автоматически откроется диалоговое окно с запросом этих параметров.

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

В Layout Editor (Редактор уровня) вы можете нажать ПКМ на объекте и выбрать в контекстном меню пункт Object information (Информация об объекте), откроется окно, которое выводит не только список действий, условий и выражений объекта, но и показывает, какие параметры объекта могут быть использованы и для чего они нужны. Например, одна из записей в списке информации об объекте Sprite содержит:

Name (Имя) Parameters (Параметры) Description (Описание)
Rotate towards a position (Поворачивать относительно позиции) 3 Rotate %2 degrees toward (%0, %1) (Поворачивать на %2 градусов относительно (%0, %1))

Колонка Parameters (Параметры) показывает, сколько параметров необходимо для этого действия (3), а колонка Description (Описание) подсказывает, для чего они выступают: здесь первые два параметра (%0 и %1) — это X и Y координаты точки, относительно которой спрайт поворачивается, а третий параметр (%2) указывает действию, на сколько градусов нужно повернуть.

Автор статьи: Mary Jane

Опубликовано: 1 ноября, 2010

Категория: События

Комментарии:

  1. SeverFoks:

    Шикарно ! фантастика! то что нужно мне )) *YAHOO*

  2. WT13:

    Mary Jane как всегда творит чудеса) спасибо нашему переводчику;) *ROSE*

  3. __Sasha__:

    Огромное спасибо *THUMBS UP*