Создание инвентаря в массиве
Теперь давайте создадим парочку предметов в нашем инвентаре.
Добавьте 21 монетку во вторую ячейку и 3 яблока в четвертую.
Как я уже говорил, ID предмета должно быть на 1 больше, чем его кадр анимации. Это нужно для того, чтобы в инвентаре не было предметов с ID = 0, так как 0 - это пустая ячейка.
Так же, если вы захотите добавить объект с количеством 1, то не поленитесь добавить эту единичку в массив, иначе этот предмет не будет складываться с другими, ведь, формально, его количество = 0.
Теперь наступает самая сложная часть туториала, но я обещаю, что дальше будет проще %)
Теперь нам нужно визуально отобразить наш инвентарь.
Для этого я использую придуманный мной алгоритм:
(картинка в оригинальном размере есть в прикрепленных файлах)
Но все не так сложно как кажется.
Преимущество этого алгоритма в том, что он автоматически делит ячейки на линии. То есть, если у вас всего 15 ячеек и вы хотите 5 в каждой линии, то он автоматически их разделит.
Пожалуй, самая "страшная" часть алгортима это эта формула:
Давайте подробнее ее разберем:
X = (((inventory.curx)-(sn(a-1)))ss)+tx
- inventory.curx - текущая ячейка в массиве, при использовании For Each Element цикла
- sn - количество ячеек в 1 линии
- a - переменная, необходимая для последующих вычислений. Она увеличивается на 1 каждый раз когда inventory.curx MOD (остаток от деления одного числа на другое) sn = 0
- ss - размер ячейки инвентаря (32 + отступ между ячейками (2)) = 34
- tx - мой алгоритм не идеален, так что приходится вычитать некоторые числа из координат, чтобы получить необходимое значение. tx and ty и есть эти "некоторые числа".
Формула, по которой вычисляется tx:
Мой алгоритм полностью открыт для критики. Я буду рад услышать ваши отзывы по улучшению его работы :S
Итак, сначала этот алгоритм создает ячейку инвентаря, и задает значения переменным, согласно массиву
/ Небольшая поправка. Не смотря на то, что массив начинается с 0, ID у созданных ячеек будут начинаться с 1. /
После, он проверяет наличие объекта по значению в массиве в inventory.curx.
Если значение > 0, значит объект существует и тогда он его создает.
Поэтому я говорил вам использовать ID объектов больше 0.
В конце, он проверяет количество этого объекта. Если количество > 0, то в переменную объекта записывается эта информация, и вместе с этим, он создает объект Text, который отображает переменную item.number.