Group

Материал из wiki.appsalutecreator.com
Перейти к: навигация, поиск

Объект Group (группа) служит "передатчиком" состояний и параметров одному из множества объектов, которые являются участниками группы.

Участник группы - любой объект, у которого есть поле группа, может стать участником группы.

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


Характеристика объекта

  • Объект Group должен находиться на глобальном экране, чтобы быть видимым на любом экране проекта. Например, его можно поместить рядом с опциями.
  • Объекту Group может принадлежать множество объектов. Например, на экране 1 находится машина А, на экране 2 находится машина В, у них в поле группа выбран объект Group1, который лежит на глобальном экране. Т.е. объекты А и В относятся к группе Group1. Если имеется одна кнопка на расшариной сцене, которая должна на первом экране передавать объекту А состояние st_1, а на втором экране передавать объекту В состояние st_1, то достаточным будет передать объекту Group1 состояние st_1. Группа транслирует это состояние на тот из своих объектов, который находится на текущем экране.
  • Объект Group может передавать состояние или параметр только одному из своих объектов. Во время каждого обращения к группе перечитывается объект, которому будет передаваться состояние, если таких объектов окажется больше 1, возникнет ошибка потому, что группа не будет знать, какому из своих объектов передать состоянии. Следовательно, в случае, когда на экране необходимо разместить несколько объектов принадлежащих группе, все эти объекты должны размещаться на разных сценах, и в каждый момент времени должа быть включена (vis=1) только одна из этих сцен, а все остальные сцены, содержащие объекты группы, должны быть отключены (vis=0). Тогда Group передаст состояние только тому одному объекту, который будет находиться на видимой сцене.
  • В глобальном экране может находится несколько объектов типа Group. Например, Group1 объединяет объекты отвечающие за запуск какой-то мини-игры, при этом на каждом экране запуск уникален, но кнопка запуска одна, а Group2 отвечает за выход из игры, при этом выход на кажном экране отличается, но кнопка выхода одна. Тогда при запуске игры мы будем обращаться к объекту Group1, а при выходе из игры - к объекту Group2, не зависимо от экрана.
  • Объекты принадлежащие одной группе могут быть разного типа и разноименными.
  • Операции применимые к группе:

- set - группе можно установить состояние st и параметр(значение) par(val);

- drop - на группу (объекты принадлежащие группе) можно отпустить объект;

  • Если объекту Group передается состояние st_1, то все объекты принадлежащие группе должны иметь состояние st_1, иначе возникнет ошибка.
  • К группе могут обращаться машины, кнопки и объекты tool. Т.е. в машине, кнопке и tool можно указать set (drop) группе.
  • Группа может транслировать гостя своим машинам. Например, кнопка btn1 передает группе состояние st_1. К группе относится машина А, которая находится на обычном экране. Машина А переходит в состояние st_1 и считает, что ее перевел в это состояние объект btn1.

Ручное управление группой

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

Group member manual.jpg

1) ни один объект недолжен подвязываться к группе (поле gr="id" );

2) Объекту Options указываем в поле groupID нашу группу в которую поместим члена группы (val_obj );

3) Объекту Options указываем в поле groupMemID наш объект группы который хотим установить в группу (val_obj );

4) Переводим объект Options в состояние setGroupMember;

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

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

Group1.jpg

Рассмотрим часть проекта, в котором используются группы.
На глобальном экране находятся Опции и три Группы (см.Рис.)
Каждой группе принадлежит свое множество участников с разных экранов. К группе Group_mask, например, принадлежат все маски игровых персонажей, такие маски присутствуют практически на каждом экране проекта; к группе Group_clean относятся все источники воды, а к группе Group_exit относятся все машины осуществляющие выход из мини-игр и т.п.


Пример 1

Group2.jpg

Рассмотрим участника группы Group_mask:
На экране fountain находится объект dialoge_small, принадлежащий группе Group_mask. Машина dialoge_small отвечает за диалог с персонажем, а так же к этой машине применяются инвентарные предметы.

Group4.jpg

Инвентарных предметов во всем проекте более 200, они применяются различным образом, но в большинстве случаев просто "дропаются" на маски персонажей, отвечающие за диалог. К персонажу, представленному на экране fountain, необходимо применить линейку, тогда персонаж поблагодарит за предмет. Если мы применим другой предмет персонаж должен сказать уникальную фразу (состояние err). Аналогично для всех персонажей игры, если приносим не тот предмет, то говорит свою уникальную фразу (состояние err). Без существования группы это означало бы, что в каждом инвентарном объекте необходимо прописать drop на каждую маску персонажа, и таких масок несколько десятков! Как это можно реализовать с использованием группы показано на рисунке слева.

На экране kanctovary игрок может получить различные объекты типа tool, один из них lineyka_picked, это правильный предмет для художника, и неправильный для всех остальных персонажей. Все остальные предметы, например, knopki_picked для художника - неправильные.

Как видно на рисунке, в свойствах объекта tool есть drag (позволяет таскать объект) и два drop (применение правильное и неправильное).

Первый drop осуществляется на правильного персонажа, в нашем случае на художника. В поле obj и obj2go мы видим нет - это потому, что маска художника находится на другом экране (чтобы это сделать нужно расшарить сцену с масками, выбрать нужную маску, после чего удалить расшареную сцену), при наведении курсора на поле виден id объекта (1821 - это id машины dialoge_small). Параметр del=1, т.е. при правильном применении предмет удалится.

Второй drop осуществляется на неправильного персонажа. В полях obj и obj2go мы видим Group_mask - это означает, что применяем к объекту, являющемуся участником группы Group_mask, т.е. любой маске персонажей. При таком применении участнику группы передается состояние err, а предмет возвращается в инвентарь (del=-1).

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

Для всех инвентарных объектов: если мы применяем tool на правильную маску, то сработает первый drop, если мы применяет tool на любую из неправильных масок сработает второй drop и текущий участник группы перейдет в состояние err.

Пример 2

Group5.jpg

Проект содержит множество разных мини-игр, которые встроены в проект по общему принципу (попадание в игру, выход из игры и т.д.)

Рассмотрим пример использования группы Group_exit. Участники этой группы - машины, которые отвечают за выход из мини-игр.

На рисунке ниже видна красная кнопка выхода, она находится на расшариной сцене Hint. Сцена Hint содержит кнопку хинта и кнопку выхода, которые одни на весь проект. Кнопка выхода button_exit передает группе состояние exit, т.е. переводит машину m_control, являющуюся участником группы, в состояние exit.

Машина m_control находится в обычной сцене текущего экрана и относится к группе, в состоянии exit включает другую сцену поверх текущей сцены с игрой, т.е. фактически осуществляет выход из мини-игры. Такая машина уникальна для каждой мини-игры.

Group6.jpg

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

Пример

Download