Inventory — различия между версиями
Shejko (обсуждение | вклад) |
Vefimov (обсуждение | вклад) |
||
(не показаны 43 промежуточные версии 8 участников) | |||
Строка 1: | Строка 1: | ||
− | '''Инвентарь''' необходим для «собирания» | + | {{TOC right}} |
+ | '''Инвентарь''' необходим для «собирания» игровых [[Object|объектов]] с последующим их использованием. Инвентарь незаменим, если объекты находящиеся в одном экране должны быть использованы в другом экране. | ||
− | == | + | == Общие параметры == |
− | ''' | + | (см. описание [[Object|Object]]) |
+ | *'''имя''' - Имя объекта Invetory в дереве проекта. Может быт произвольным. | ||
+ | *'''id-объекта''' - Уникальный номер объекта Invetory, который можно увидеть при наведении курсора на строку "имя". | ||
+ | *'''синхронизация''' - Применяется для синхронизации между лейаутами. Если указан параметр "нет", то объект будет активен только на текущем лейауте. По умолчанию указан параметр "да". | ||
+ | *'''сохранение параметров''' - Настройка этого параметра актуальна, если приложение в дальнейшем будет сворачиваться в системную панель («трей»). Выбирается значение этого параметра из выпадающего списка. Возможны следующие варианты: "нет", "только объект", "объект с подобъектами", "только подобъекты". При выходе из трэя будут восстановлены ранее измененные/установленные (при переходе с одного экрана на другой)параметры объектов или подобъектов в зависимости от выбранного варианта для этого параметра. По умолчанию указан параметр "нет". Следует помнить, что если выбирается для объекта некоторой сцены значения этого параметра отличное от "нет", то должно и предусматриваться соответствующее значение этого параметра и для этой сцены, и для экрана, содержащего эту сцену. | ||
+ | *'''z''' - Параметр порядка рисования объекта. Сначала рисуются объекты с большим z, затем, поверх них - с меньшим. | ||
+ | *'''память''' - Если 1, то при повторном открытии экрана объект не обновляет свои параметры (помнит текущие параметры, оставшиеся от предыдущего посещения экрана). По умолчанию значение этого параметра 0. | ||
− | + | == Основные параметры == | |
− | ''' | + | '''Группа - положение''' |
− | + | *''' X''' - Горизонтальная координата точки пивота объекта в пикселях. Отсчитывается от точки пивота сцены. | |
+ | *''' Y''' - Вертикальная координата точки пивота объекта в пикселях. Отсчитывается от точки пивота сцены. | ||
− | + | '''Группа - размер''' | |
+ | *''' W''' - Ширина графического объекта в пикселях. | ||
+ | *''' H''' - Высота графического объекта в пикселях. | ||
− | + | '''Группа - модификаторы''' | |
− | ''' | + | *'''alpha''' - Прозрачность: от 0 (прозрачен) до 1 (не прозрачен). |
+ | *'''angle''' - Угол поворота в градусах (0 - не повёрнут). Отсчитывается от оси x вниз. Вверх - идут отрицательные углы. | ||
+ | *'''scale x''' - Масштаб по оси '''x''' (1 - не изменен, 1.5 - увеличен в полтора раза, и т.д.). | ||
+ | *'''scale y''' - Масштаб по оси '''y''' (1 - не изменен, 1.5 - увеличен в полтора раза, и т.д.). | ||
− | ''' | + | '''Группа - внешний вид''' |
− | ''' | + | *'''Картинка''' - Ресурс для отображения инвентаря (тогда таблица помещается сверху инвентаря), может отсутствовать, если таблица имеет свой ресурс. Удобнее делать инвентарь безресурсным. |
− | + | *'''Таблица''' - Объект типа table, который является визуальным отображением списка. В ней будут находиться объекты, перемещенные в инвентарь. Если количество ячеек в таблице будет меньше,чем количество добавляемых объектов, то добавляемый объект при смене сцены потеряется. Таблица может быть вертикальной, горизонтальной, или иметь несколько ячеек в ширину и несколько в высоту. Если у таблицы несколько строк и столбцов, то объекты заполняют столбцы, то есть объекты сначала заполнят первый столбец, потом начнут заполнять второй столбец, потом третий и т. д. Объект при переводе инвентаря в состояние add или return летят к правому нижнему углу таблицы. Если в таблице не хватает места, то объекты в таблицу не попадают, а остаются возле правого нижнего её угла. | |
+ | '''Группа - скорость''' | ||
− | + | *'''полёта''' — Скорость полёта объекта перемещаемого в инвентарь к таблице инвентаря. | |
+ | *'''вращения''' — Скорость вращения объекта во время полёта в инвентарь. | ||
− | + | == Дополнительные параметры == | |
− | |||
− | |||
− | |||
+ | *'''Сцена извлечения''' - Можно указать конкретную сцену, на которую будет извлекаться инвентарь (не обязательно). | ||
+ | *'''Объект''' — Объект, на котором будет происходить операция, например, добавления в инвентарь. Если для инвентаря один объект, то его можно указать в этом поле, но чаще всего объектов несколько. В этом случае оставляем поле пустым. | ||
+ | *'''Состояние''' — Возможны следующие состояния инвентаря: '''add''' — в случае добавления объекта в инвентарь, '''return''' — в случае возвращения объекта в инвентарь, '''extract''' — в случае взятия объекта из инвентаря, '''remove''' — в случае удаления объекта из инвентаря. Состояние '''pos''' - инвентарь в этом состоянии возвращает два параметра, строку и столбец ячейки, в которой находится объект (только перед тем, как перевести инвентарь в это состояние, нужно ему указать объект): posRow - номер строки, начиная с 0; posCol - номер столбца, начиная с 0. | ||
+ | *'''Сохранять извлеченный''' - Принимает два значения: 0 - после извлечения из таблицы при смене экрана или при сворачивании объект теряется; 1 - после извлечения из таблицы при смене экрана или при сворачивании объект возвращается в таблицу. | ||
+ | *'''Добавить в начало''' - Принимает два значения: 1 - добавлять элементы в начало таблицы, 0 - в конец. | ||
− | == | + | == Примечания == |
− | + | *Один объект не может быть добавлен (add) дважды. А извлекать (extract) и возвращать (return) объект в инвентарь можно n-раз. | |
+ | |||
+ | *После того как объект "отработал", его необходимо удалить из инвентаря (remove), при удалении освобождается занимаемая им ячейка таблицы. | ||
+ | |||
+ | *Добавлять в инвентарь можно различные типы объектов, например, рисунок, машина, текст, а так же объекты, содержащие свои подобъекты. | ||
+ | |||
+ | *Инвентарь с таблицей располагаются на одной расшареной сцене, чтобы быть доступными на любом экране. Инвентарь и таблица должны иметь параметр "память" = 1, чтобы при смене экрана запоминались объекты, содержащиеся в таблице. | ||
+ | |||
+ | *Объект, который добавляется в инвентарь, например, машина Obj1, должен находиться на отдельной сцене, у которой Память = 1 (чтобы сцена, которая изначально содержит Obj1, не инитилась больше, и объект не скакал от таблицы к сцене и обратно, т.к. это скакание заметно визуально при смене экранов). Лучше всего, если эта "родная" сцена с памятью содержала только объекты, которые будут добавляться в инвентарь. | ||
− | + | == Пример использования == | |
− | + | Рассмотрим для примера проект в котором можно применить объект инвентарь. | |
+ | |||
+ | Есть поросёнок, который ходит из одного края экрана в другой, и 3 объекта: молоток, шапка, ведро, которые разбросаны по экрану. | ||
+ | По первому клику по каждому объекту они должны попасть в инвентарь -> по второму — достаться из инвентаря и начать тягаться. -> Когда объект попадает на поросёнка надо чтобы он появился у поросёнка -> клик на объект у поросёнка — объект снова попадает в инвентарь. | ||
− | + | === Пример использования состояний инвентаря === | |
− | : | + | [[Файл:Invent example.jpg]] |
− | + | Состояние '''add''': | |
'''set''' | '''set''' | ||
− | : '''obj''' — | + | : '''obj''' — указан инвентарь в который добавляем объект. |
− | : ''' | + | : '''par''' — параметр в который будем записывать id добавляемого объекта. Для инвентаря этот параметр называется '''obj'''. |
+ | : '''val_obj''' – указан объект, id которого будет записано в параметр '''obj''' инвентаря. | ||
+ | '''set''' | ||
− | + | : '''obj''' — объект который переводим в новое состояние, в данном случае будем добавлять объект указанный выше в инвентарь. | |
+ | : '''st''' — состояние в которое переводим инвентарь, в нашем случае добавляем объект в инвентарь, поэтому состояние '''add'''. | ||
− | |||
− | |||
− | + | Состояние '''extract''' - всё аналогично состоянию '''add''', кроме второго set-а, которым достаём объект из инвентаря, с помощью перевода инвентаря в состояние '''extract'''. Аналогично прописываются перевод в состояния '''return''', '''remove'''. | |
− | |||
+ | === Обзор проекта === | ||
− | + | Инвентарь вынесен в отдельный глобальный экран для того чтобы в дальнейшем была возможность использовать один и тот же инвентарь на разных экранах. Экран инвентаря расшарен(сделана ссылка) на основной экран, для того чтобы инвентарь отображался на экране основной сцены, но мог быть отредактирован из других сцен в будущем. Также организована маска для поросёнка, на которую будут "падать" ведро, молоток, шапка. Маска вынесена отдельно для избежания проблем с падением объекта на группу объектов. Маска двигается с такой же скоростью, как и поросёнок.<br><br> | |
+ | Также в проекте используются такие машины как: text_inv, control_inv, static_border. Машина text_inv отвечает за надпись на экране "Inventory" и ее исчезновение в момент появления/выдвигания инвентарной панели. Машина control_inv контролирует, когда инвентарная панель должна появляться и исчезать. А появляется она по нажатию на нижнюю область экрана и в момент добавления инвентарного объекта в инвентарь. Исчезает через определенное время. Машина static_border, подобъектом которой является инвентарная таблица, - это и есть та инвентарная панель. | ||
− | |||
[[Файл:Invent_dcr_pr.jpg]] | [[Файл:Invent_dcr_pr.jpg]] | ||
− | |||
=== Настройки инвентаря и таблиц === | === Настройки инвентаря и таблиц === | ||
Строка 77: | Строка 105: | ||
====Настройки инвентаря==== | ====Настройки инвентаря==== | ||
− | |||
[[Файл:Invent_options.jpg]] | [[Файл:Invent_options.jpg]] | ||
В качестве таблицы для инвентаря используем выбранную таблицу. | В качестве таблицы для инвентаря используем выбранную таблицу. | ||
− | Объекты в таблицу летят со скоростью | + | Объекты в таблицу летят со скоростью 700 и вращаются со скоростью 360. |
− | Настройки таблицы инвентаря | + | ====Настройки таблицы инвентаря==== |
− | У таблицы | + | |
+ | У таблицы 10 колонок и 1 строчка, видимых 5 колонок и 1 строчка(определены в группе параметров "таблица"), при этом объекты, которые попадают в таблицу инвентаря будут сжиматься(сжимать = 1). | ||
[[Файл:Invent_table.jpg]] | [[Файл:Invent_table.jpg]] | ||
− | |||
=== Основные машины === | === Основные машины === | ||
Основное ведро: | Основное ведро: | ||
− | [[Файл:Invent_bucket.jpg]] | + | [[Файл:Invent_bucket.jpg|1070px]] |
− | По клику Передаём id ведра инвентарю и добавляем его в инвентарь, ждём второго клика. | + | По клику Передаём id ведра инвентарю и добавляем его в инвентарь, ждём второго клика, состояние add. |
− | По второму клику достаём объект из инвентаря и разрешаем его таскать по экрану, при этом ожидаем что он "упадёт" на маску поросёнка. | + | По второму клику достаём объект из инвентаря и разрешаем его таскать по экрану, при этом ожидаем что он "упадёт" на маску поросёнка, состояние extract. |
− | При падении на маску поросёнка ведро исчезает и включает до того скрытое ведро у поросёнка. | + | При падении на маску поросёнка ведро исчезает и включает до того скрытое ведро у поросёнка, состояние remove. |
− | + | При падении на другую область экрана ведро попадает снова в инвентарь, состояние return. | |
Ведро у поросёнка: | Ведро у поросёнка: | ||
Строка 104: | Строка 131: | ||
Изначально машина прозрачна и не видна на экране. | Изначально машина прозрачна и не видна на экране. | ||
− | Основное ведро переводит в определённый момент ведро у поросёнка в состояние on в котором ведро у поросёнка становится видимым и ожидает клика. | + | Основное ведро переводит в определённый момент ведро у поросёнка в состояние '''on''' в котором ведро у поросёнка становится видимым и ожидает клика. По клику ведро у поросенка снова становится невидимым, а основное - добавляется в инвентарь. |
− | + | ||
Основной молоток: | Основной молоток: | ||
− | [[Файл:Invent_hammer.jpg]] | + | [[Файл:Invent_hammer.jpg|1070px]] |
− | По клику Передаём id молотка инвентарю и добавляем его в инвентарь, ждём второго клика. | + | По клику Передаём id молотка инвентарю и добавляем его в инвентарь, ждём второго клика, состояние add. |
− | По второму клику достаём объект из инвентаря и разрешаем его таскать по экрану, при этом ожидаем что он "упадёт" на маску поросёнка. | + | По второму клику достаём объект из инвентаря и разрешаем его таскать по экрану, при этом ожидаем что он "упадёт" на маску поросёнка, состояние extract. |
− | При падении на маску поросёнка молоток исчезает и включает до того скрытый молоток у поросёнка. | + | При падении на маску поросёнка молоток исчезает и включает до того скрытый молоток у поросёнка, состояние remove. |
+ | При падении на другую область экрана молоток попадает снова в инвентарь, состояние return. | ||
Молоток у поросёнка: | Молоток у поросёнка: | ||
Строка 118: | Строка 146: | ||
Изначально машина прозрачна и не видна на экране. | Изначально машина прозрачна и не видна на экране. | ||
− | Основной молоток переводит в определённый момент молоток у поросёнка в состояние on в котором молоток у поросёнка становится видимым и ожидает клика. | + | Основной молоток переводит в определённый момент молоток у поросёнка в состояние '''on''' в котором молоток у поросёнка становится видимым и ожидает клика. |
− | При клике переводим основной молоток в состояние, в котором с помощью состояния инвентаря add молоток добавляется в инвентарь, и делаем основной молоток видимым, а молоток у поросёнка становится прозрачным. | + | При клике переводим основной молоток в состояние, в котором с помощью состояния инвентаря '''add''' молоток добавляется в инвентарь, и делаем основной молоток видимым, а молоток у поросёнка становится прозрачным. |
+ | |||
Основная шапка: | Основная шапка: | ||
− | [[Файл:Invent_hat.jpg]] | + | [[Файл:Invent_hat.jpg|1070px]] |
− | По клику Передаём id шапки инвентарю и добавляем её в инвентарь, ждём второго клика. | + | По клику Передаём id шапки инвентарю и добавляем её в инвентарь, ждём второго клика,, состояние add. |
− | По второму клику достаём объект из инвентаря и разрешаем его таскать по экрану, при этом ожидаем что он "упадёт" на маску поросёнка. | + | По второму клику достаём объект из инвентаря и разрешаем его таскать по экрану, при этом ожидаем что он "упадёт" на маску поросёнка, состояние extract. |
− | При падении на маску поросёнка шапка исчезает и включает до того скрытую шапку у поросёнка. | + | При падении на маску поросёнка шапка исчезает и включает до того скрытую шапку у поросёнка, состояние remove. |
+ | При падении на другую область экрана молоток попадает снова в инвентарь, состояние return. | ||
Шапка у поросёнка: | Шапка у поросёнка: | ||
Строка 132: | Строка 162: | ||
Изначально машина прозрачна и не видна на экране. | Изначально машина прозрачна и не видна на экране. | ||
− | Основная шапка переводит в определённый момент шапку у поросёнка в состояние on в котором шапка у поросёнка становится видимым и ожидает клика. | + | Основная шапка переводит в определённый момент шапку у поросёнка в состояние '''on''' в котором шапка у поросёнка становится видимым и ожидает клика. |
− | При клике переводим основную шапку в состояние, в котором с помощью состояния инвентаря add шапка добавляется в инвентарь, и делаем основную шапку видимой, а шапка у поросёнка становится прозрачной. | + | При клике переводим основную шапку в состояние, в котором с помощью состояния инвентаря '''add''' шапка добавляется в инвентарь, и делаем основную шапку видимой, а шапка у поросёнка становится прозрачной. |
+ | |||
+ | === Инвентарь на нескольких игровых экранах === | ||
+ | Также инвентарь можно использовать на нескольких игровых экранах, для этого надо расположить на глобальном экране сам объект инвентарь, его таблицу и все объекты которые будут класться в инвентарь. Для того чтобы при переходе с экрана на экран объекты, которые будут в инвентаре не приводили к ошибкам необходимо, как минимум, им в параметре "память" поставить "1". Тогда при переходе с экрана на экран объект не будет уходить в начальное состояние. | ||
+ | |||
+ | Рассмотрим на базе текущего проекта использование общего инвентаря для нескольких экранов. | ||
+ | Для этого добавим ещё один экран. На него скопируем графику из игрового, кроме поросёнка, и расшарим туда инвентарь | ||
+ | Обязательно поставим параметр "память" для ведра, молотка, шапки, которые на сцене с инвентарём, равным "1". Также укажем "память"="1" для шапки, молотка и ведра, которые у поросёнка. | ||
+ | |||
+ | В итоге у нас получится 3 экрана: | ||
+ | *1-й без поросёнка | ||
+ | *2-й с поросёнком на которого можно применять объекты из инвентаря | ||
+ | *3-й - глобальный - на нём инвентарь, таблица и объекты инвентаря. | ||
+ | [[Файл:Invent sh global.jpg]] | ||
+ | |||
+ | Изменения в настройках машин, которые помещаются в инвентарь, для корректного его использования: | ||
+ | [[Файл:Inventory example save.jpg]] | ||
+ | Аналогично необходимо сделать в машинах "ведро", "шапка", "молоток" у поросёнка | ||
+ | |||
+ | Теперь на первом экране можно собрать объекты в инвентарь и на втором их применить на поросёнке. Не использованные объекты будут оставаться в инвентаре. | ||
+ | Если заберём все объекты с первого экрана в инвентарь, перейдём во второй экран, и применим, на пример, молоток, потом снова перейдём на 1-й экран, то в инвентаре останутся только 2 оставшихся объекта, а если снова вернёмся на 2-й экран, то поросёнок будет бегать уже с применённым на него объектом, если его вернём в инвентарь, кликнув на него, то он вернётся и будет перемещаться с инвентарём по экранам. | ||
+ | |||
+ | В качестве дальнейшего улучшения можно дописать условия которые будут скрывать и показывать определённые объекты на определённых экранах в зависимости от их местонахождения(в инвентаре или нет). С текущими настройками, не собирая объекты на первом экране, и переместившись на второй, они там будут т.к. сцена на которой они находятся расшарена и они в составе сцены будут отображаться на всех экранах. | ||
+ | |||
+ | == Дополнительные возможности == | ||
+ | |||
+ | [[Файл:Ret.jpg|380px|right]] | ||
+ | Параметр '''ret''' - используется при изменении параметров объектов, помещенных в инвентарь. "Перечитывает" параметры объектов инвентаря и "возвращает" объекты с новыми параметрами сцене. Например, если в инвентарь был помещен объект, у которого альфа = 0, а затем в определенный момент мы меняем этому объекту параметр альфа на 1, то, чтобы эти изменения выполнились, необходимо через set объекту Inventory установить параметр ret в значение val_obj = сцена, на которой находится таблица и инвентарь. | ||
+ | |||
+ | На рисунке ниже done6 - подобъект объекта task_6, помещенного в инвентарь, у которого альфа меняется с 0 на 1. Объект типа инвентарь Task_Inv находится на сцене game. m_text - обычная машина, которая меняет параметр. | ||
+ | |||
+ | Состояние '''pos''' - Инвентарь в этом состоянии возвращает два параметра, строку и столбец ячейки, в которой находится объект (только перед тем, как перевести инвентарь в это состояние, нужно ему указать объект): | ||
+ | |||
+ | *'''posRow''' - номер строки, начиная с 0; | ||
+ | *'''posCol''' - номер столбца, начиная с 0. | ||
+ | |||
+ | |||
+ | Пример | ||
+ | |||
+ | Таблица инвентаря состоит из нескольких столбцов по три строки в каждом, нумерация сверху-вниз, справа-налево. Нам нужно вычислить номер, под которым объект task_6 добавлен в инвентарь. Переменной r присваивается строка, переменной c присваивается столбец, переменная taskk - номер в списке. | ||
+ | |||
+ | [[Файл:Pos.jpg]] | ||
+ | |||
+ | == Пример == | ||
+ | |||
+ | [http://fs5.absolutist.com/files/wikisample/Invetory.rar Download] | ||
+ | |||
+ | |||
+ | [[Category:Game mechanic]] |
Текущая версия на 08:45, 5 декабря 2014
Инвентарь необходим для «собирания» игровых объектов с последующим их использованием. Инвентарь незаменим, если объекты находящиеся в одном экране должны быть использованы в другом экране.
Общие параметры
(см. описание Object)
- имя - Имя объекта Invetory в дереве проекта. Может быт произвольным.
- id-объекта - Уникальный номер объекта Invetory, который можно увидеть при наведении курсора на строку "имя".
- синхронизация - Применяется для синхронизации между лейаутами. Если указан параметр "нет", то объект будет активен только на текущем лейауте. По умолчанию указан параметр "да".
- сохранение параметров - Настройка этого параметра актуальна, если приложение в дальнейшем будет сворачиваться в системную панель («трей»). Выбирается значение этого параметра из выпадающего списка. Возможны следующие варианты: "нет", "только объект", "объект с подобъектами", "только подобъекты". При выходе из трэя будут восстановлены ранее измененные/установленные (при переходе с одного экрана на другой)параметры объектов или подобъектов в зависимости от выбранного варианта для этого параметра. По умолчанию указан параметр "нет". Следует помнить, что если выбирается для объекта некоторой сцены значения этого параметра отличное от "нет", то должно и предусматриваться соответствующее значение этого параметра и для этой сцены, и для экрана, содержащего эту сцену.
- z - Параметр порядка рисования объекта. Сначала рисуются объекты с большим z, затем, поверх них - с меньшим.
- память - Если 1, то при повторном открытии экрана объект не обновляет свои параметры (помнит текущие параметры, оставшиеся от предыдущего посещения экрана). По умолчанию значение этого параметра 0.
Основные параметры
Группа - положение
- X - Горизонтальная координата точки пивота объекта в пикселях. Отсчитывается от точки пивота сцены.
- Y - Вертикальная координата точки пивота объекта в пикселях. Отсчитывается от точки пивота сцены.
Группа - размер
- W - Ширина графического объекта в пикселях.
- H - Высота графического объекта в пикселях.
Группа - модификаторы
- alpha - Прозрачность: от 0 (прозрачен) до 1 (не прозрачен).
- angle - Угол поворота в градусах (0 - не повёрнут). Отсчитывается от оси x вниз. Вверх - идут отрицательные углы.
- scale x - Масштаб по оси x (1 - не изменен, 1.5 - увеличен в полтора раза, и т.д.).
- scale y - Масштаб по оси y (1 - не изменен, 1.5 - увеличен в полтора раза, и т.д.).
Группа - внешний вид
- Картинка - Ресурс для отображения инвентаря (тогда таблица помещается сверху инвентаря), может отсутствовать, если таблица имеет свой ресурс. Удобнее делать инвентарь безресурсным.
- Таблица - Объект типа table, который является визуальным отображением списка. В ней будут находиться объекты, перемещенные в инвентарь. Если количество ячеек в таблице будет меньше,чем количество добавляемых объектов, то добавляемый объект при смене сцены потеряется. Таблица может быть вертикальной, горизонтальной, или иметь несколько ячеек в ширину и несколько в высоту. Если у таблицы несколько строк и столбцов, то объекты заполняют столбцы, то есть объекты сначала заполнят первый столбец, потом начнут заполнять второй столбец, потом третий и т. д. Объект при переводе инвентаря в состояние add или return летят к правому нижнему углу таблицы. Если в таблице не хватает места, то объекты в таблицу не попадают, а остаются возле правого нижнего её угла.
Группа - скорость
- полёта — Скорость полёта объекта перемещаемого в инвентарь к таблице инвентаря.
- вращения — Скорость вращения объекта во время полёта в инвентарь.
Дополнительные параметры
- Сцена извлечения - Можно указать конкретную сцену, на которую будет извлекаться инвентарь (не обязательно).
- Объект — Объект, на котором будет происходить операция, например, добавления в инвентарь. Если для инвентаря один объект, то его можно указать в этом поле, но чаще всего объектов несколько. В этом случае оставляем поле пустым.
- Состояние — Возможны следующие состояния инвентаря: add — в случае добавления объекта в инвентарь, return — в случае возвращения объекта в инвентарь, extract — в случае взятия объекта из инвентаря, remove — в случае удаления объекта из инвентаря. Состояние pos - инвентарь в этом состоянии возвращает два параметра, строку и столбец ячейки, в которой находится объект (только перед тем, как перевести инвентарь в это состояние, нужно ему указать объект): posRow - номер строки, начиная с 0; posCol - номер столбца, начиная с 0.
- Сохранять извлеченный - Принимает два значения: 0 - после извлечения из таблицы при смене экрана или при сворачивании объект теряется; 1 - после извлечения из таблицы при смене экрана или при сворачивании объект возвращается в таблицу.
- Добавить в начало - Принимает два значения: 1 - добавлять элементы в начало таблицы, 0 - в конец.
Примечания
- Один объект не может быть добавлен (add) дважды. А извлекать (extract) и возвращать (return) объект в инвентарь можно n-раз.
- После того как объект "отработал", его необходимо удалить из инвентаря (remove), при удалении освобождается занимаемая им ячейка таблицы.
- Добавлять в инвентарь можно различные типы объектов, например, рисунок, машина, текст, а так же объекты, содержащие свои подобъекты.
- Инвентарь с таблицей располагаются на одной расшареной сцене, чтобы быть доступными на любом экране. Инвентарь и таблица должны иметь параметр "память" = 1, чтобы при смене экрана запоминались объекты, содержащиеся в таблице.
- Объект, который добавляется в инвентарь, например, машина Obj1, должен находиться на отдельной сцене, у которой Память = 1 (чтобы сцена, которая изначально содержит Obj1, не инитилась больше, и объект не скакал от таблицы к сцене и обратно, т.к. это скакание заметно визуально при смене экранов). Лучше всего, если эта "родная" сцена с памятью содержала только объекты, которые будут добавляться в инвентарь.
Пример использования
Рассмотрим для примера проект в котором можно применить объект инвентарь.
Есть поросёнок, который ходит из одного края экрана в другой, и 3 объекта: молоток, шапка, ведро, которые разбросаны по экрану. По первому клику по каждому объекту они должны попасть в инвентарь -> по второму — достаться из инвентаря и начать тягаться. -> Когда объект попадает на поросёнка надо чтобы он появился у поросёнка -> клик на объект у поросёнка — объект снова попадает в инвентарь.
Пример использования состояний инвентаря
Состояние add:
set
- obj — указан инвентарь в который добавляем объект.
- par — параметр в который будем записывать id добавляемого объекта. Для инвентаря этот параметр называется obj.
- val_obj – указан объект, id которого будет записано в параметр obj инвентаря.
set
- obj — объект который переводим в новое состояние, в данном случае будем добавлять объект указанный выше в инвентарь.
- st — состояние в которое переводим инвентарь, в нашем случае добавляем объект в инвентарь, поэтому состояние add.
Состояние extract - всё аналогично состоянию add, кроме второго set-а, которым достаём объект из инвентаря, с помощью перевода инвентаря в состояние extract. Аналогично прописываются перевод в состояния return, remove.
Обзор проекта
Инвентарь вынесен в отдельный глобальный экран для того чтобы в дальнейшем была возможность использовать один и тот же инвентарь на разных экранах. Экран инвентаря расшарен(сделана ссылка) на основной экран, для того чтобы инвентарь отображался на экране основной сцены, но мог быть отредактирован из других сцен в будущем. Также организована маска для поросёнка, на которую будут "падать" ведро, молоток, шапка. Маска вынесена отдельно для избежания проблем с падением объекта на группу объектов. Маска двигается с такой же скоростью, как и поросёнок.
Также в проекте используются такие машины как: text_inv, control_inv, static_border. Машина text_inv отвечает за надпись на экране "Inventory" и ее исчезновение в момент появления/выдвигания инвентарной панели. Машина control_inv контролирует, когда инвентарная панель должна появляться и исчезать. А появляется она по нажатию на нижнюю область экрана и в момент добавления инвентарного объекта в инвентарь. Исчезает через определенное время. Машина static_border, подобъектом которой является инвентарная таблица, - это и есть та инвентарная панель.
Настройки инвентаря и таблиц
Настройки инвентаря
В качестве таблицы для инвентаря используем выбранную таблицу. Объекты в таблицу летят со скоростью 700 и вращаются со скоростью 360.
Настройки таблицы инвентаря
У таблицы 10 колонок и 1 строчка, видимых 5 колонок и 1 строчка(определены в группе параметров "таблица"), при этом объекты, которые попадают в таблицу инвентаря будут сжиматься(сжимать = 1).
Основные машины
По клику Передаём id ведра инвентарю и добавляем его в инвентарь, ждём второго клика, состояние add. По второму клику достаём объект из инвентаря и разрешаем его таскать по экрану, при этом ожидаем что он "упадёт" на маску поросёнка, состояние extract. При падении на маску поросёнка ведро исчезает и включает до того скрытое ведро у поросёнка, состояние remove. При падении на другую область экрана ведро попадает снова в инвентарь, состояние return.
Изначально машина прозрачна и не видна на экране. Основное ведро переводит в определённый момент ведро у поросёнка в состояние on в котором ведро у поросёнка становится видимым и ожидает клика. По клику ведро у поросенка снова становится невидимым, а основное - добавляется в инвентарь.
По клику Передаём id молотка инвентарю и добавляем его в инвентарь, ждём второго клика, состояние add. По второму клику достаём объект из инвентаря и разрешаем его таскать по экрану, при этом ожидаем что он "упадёт" на маску поросёнка, состояние extract. При падении на маску поросёнка молоток исчезает и включает до того скрытый молоток у поросёнка, состояние remove. При падении на другую область экрана молоток попадает снова в инвентарь, состояние return.
Изначально машина прозрачна и не видна на экране. Основной молоток переводит в определённый момент молоток у поросёнка в состояние on в котором молоток у поросёнка становится видимым и ожидает клика. При клике переводим основной молоток в состояние, в котором с помощью состояния инвентаря add молоток добавляется в инвентарь, и делаем основной молоток видимым, а молоток у поросёнка становится прозрачным.
По клику Передаём id шапки инвентарю и добавляем её в инвентарь, ждём второго клика,, состояние add. По второму клику достаём объект из инвентаря и разрешаем его таскать по экрану, при этом ожидаем что он "упадёт" на маску поросёнка, состояние extract. При падении на маску поросёнка шапка исчезает и включает до того скрытую шапку у поросёнка, состояние remove. При падении на другую область экрана молоток попадает снова в инвентарь, состояние return.
Изначально машина прозрачна и не видна на экране. Основная шапка переводит в определённый момент шапку у поросёнка в состояние on в котором шапка у поросёнка становится видимым и ожидает клика. При клике переводим основную шапку в состояние, в котором с помощью состояния инвентаря add шапка добавляется в инвентарь, и делаем основную шапку видимой, а шапка у поросёнка становится прозрачной.
Инвентарь на нескольких игровых экранах
Также инвентарь можно использовать на нескольких игровых экранах, для этого надо расположить на глобальном экране сам объект инвентарь, его таблицу и все объекты которые будут класться в инвентарь. Для того чтобы при переходе с экрана на экран объекты, которые будут в инвентаре не приводили к ошибкам необходимо, как минимум, им в параметре "память" поставить "1". Тогда при переходе с экрана на экран объект не будет уходить в начальное состояние.
Рассмотрим на базе текущего проекта использование общего инвентаря для нескольких экранов. Для этого добавим ещё один экран. На него скопируем графику из игрового, кроме поросёнка, и расшарим туда инвентарь Обязательно поставим параметр "память" для ведра, молотка, шапки, которые на сцене с инвентарём, равным "1". Также укажем "память"="1" для шапки, молотка и ведра, которые у поросёнка.
В итоге у нас получится 3 экрана:
- 1-й без поросёнка
- 2-й с поросёнком на которого можно применять объекты из инвентаря
- 3-й - глобальный - на нём инвентарь, таблица и объекты инвентаря.
Изменения в настройках машин, которые помещаются в инвентарь, для корректного его использования: Аналогично необходимо сделать в машинах "ведро", "шапка", "молоток" у поросёнка
Теперь на первом экране можно собрать объекты в инвентарь и на втором их применить на поросёнке. Не использованные объекты будут оставаться в инвентаре. Если заберём все объекты с первого экрана в инвентарь, перейдём во второй экран, и применим, на пример, молоток, потом снова перейдём на 1-й экран, то в инвентаре останутся только 2 оставшихся объекта, а если снова вернёмся на 2-й экран, то поросёнок будет бегать уже с применённым на него объектом, если его вернём в инвентарь, кликнув на него, то он вернётся и будет перемещаться с инвентарём по экранам.
В качестве дальнейшего улучшения можно дописать условия которые будут скрывать и показывать определённые объекты на определённых экранах в зависимости от их местонахождения(в инвентаре или нет). С текущими настройками, не собирая объекты на первом экране, и переместившись на второй, они там будут т.к. сцена на которой они находятся расшарена и они в составе сцены будут отображаться на всех экранах.
Дополнительные возможности
Параметр ret - используется при изменении параметров объектов, помещенных в инвентарь. "Перечитывает" параметры объектов инвентаря и "возвращает" объекты с новыми параметрами сцене. Например, если в инвентарь был помещен объект, у которого альфа = 0, а затем в определенный момент мы меняем этому объекту параметр альфа на 1, то, чтобы эти изменения выполнились, необходимо через set объекту Inventory установить параметр ret в значение val_obj = сцена, на которой находится таблица и инвентарь.
На рисунке ниже done6 - подобъект объекта task_6, помещенного в инвентарь, у которого альфа меняется с 0 на 1. Объект типа инвентарь Task_Inv находится на сцене game. m_text - обычная машина, которая меняет параметр.
Состояние pos - Инвентарь в этом состоянии возвращает два параметра, строку и столбец ячейки, в которой находится объект (только перед тем, как перевести инвентарь в это состояние, нужно ему указать объект):
- posRow - номер строки, начиная с 0;
- posCol - номер столбца, начиная с 0.
Пример
Таблица инвентаря состоит из нескольких столбцов по три строки в каждом, нумерация сверху-вниз, справа-налево. Нам нужно вычислить номер, под которым объект task_6 добавлен в инвентарь. Переменной r присваивается строка, переменной c присваивается столбец, переменная taskk - номер в списке.