Итак урок рассчитан на то, что вы уже знакомы с
массивами,( во всяком случае это название вас не пугает)) Преступим для
начала нам понадобится курсор, но не простой, необходимо чтобы он
двигался по ячейкам нашего инвентаря для этого добавляем соответствующий
спрайт, и переключаемся на Event editor добавляем следующее:
остановимся на функции
round(), она еще не раз нам пригодится функция эта отсекает десятичный «хвост» числа например
round(5,246) вернет значение
5 рассмотрим всю формулу
Round(MouseX/50)*50 например имеем координату мыши
152 далее делим на
50 -> получаем
3,04 ф-цией
round отсекаем
,04 -> остается
3 домножаем на
50 -> и имеем
150 т.е. число на которое делим\домножаем, определяет размер нашей «сетки» также добавим курсору две переменные «
Item» и «
perenos»
они пригодится для переноса итемов из ячейки в ячейку также нам
понадобятся сами предметы и нужны будут двух видов, те которые будут в
«миру» которые будем подбирать, и те которые будут отображаться в
инвентаре для начала создадим три простых предмета
Yabloko,
Grusha и
Derevo всех их добавим в семью , например
Friendly (в принципе можете выбрать любую понравившуюся или создать новую) также всем им добавим приветную переменную
ID, она будет отвечать за тип предмета
Yabloko – 1 , Grusha – 2 , Derevo - 3 Почти тоже самое делаем для второй группы объектов я их назвал
Item1 ,
Item2 и
item3 добавим их а семью
Item и так же присвоим приватную переменную
ID по тому же принципу
Item1(Yabloko) – 1 , Item2(Grusha) – 2 , Item3(Derevo) – 3 Приготовления закончились , займемся основой, массивом для начала добавим, и настроим его размер скажем
3х3х1 (в примере взят трех мерный массив
3х3х2 не смущайтесь просто рассчитано на вторую часть урока с чуть более
сложным инвентарем) Итак добавим действие при «подборе» предмета т.е.
при нажатии на объект вне инвентаря он должен переместиться в инвентарь
добавляем следующее:

С первой строкой думаю все ясно, если кликнули по объекту из семьи
Friendly то
... Далее начинается цикл перебора всех элементов массива и проверка на
то , свободна ли данная ячейка или нет и если данная ячейка «свободна» ,
т.е. значение её равно
0 , тогда в эту ячейку записываем значение переменной
ID нашего подобранного предмета далее идет вызов функции «
inv» о ней чуть позже после удаляем наш подобранный объект останавливаем наш цикл вызовом
Break current loop (находится она в
System -> loop) Разберем функцию «
inv»
, (надеюсь пользоваться функциями вы умеете, т.к. это незаменимая вещь
при часто повторяющихся однотипных действиях) Эта функция будет
перерисовывать наш инвентарь
Сначала удаляем все объекты инвентаря далее уже знакомый цикл перебора в
котором идет проверка значения текущей ячейки и по значению её
создается нужный объект прошу заметить что сетка у нас выбрана
50х50 , и как видите объект создается по координатам ячейки домноженным на
50! Идем далее Для переноса итемов в инвентаре добавим следуюшее

при клике мыши проверяем значение ячейки под курсором (не забываем про сетку, делим координаты курсора на
50) если значение этой ячейки не равно
0, т.е. там что-то есть, и переменная «
perenos», принадлежащая курсору равна
0 (т.е. мы ничего не переносим), тогда присваиваем переменной «
Item» значение этой ячейки (данная переменная будет служить эдаким буфером переноса) а саму эту ячейку очищаем, присваивая ей
0 так же меняем переменную «
perenos» на
1, (т.е. идет перетаскивание) и в конце вызываем ф-цию «
inv» (перерисовываем инвентарь) Далее идет достаточно большой блок связанный с отпусканием мыши , разберем его по частям

сначала проверяем свободна ли ячейка под курсором, и идет ли перемещение (
«perenos»=1?) если да, то в эту ячейку записываем значение переменной «
Item» нашего курсора, которая как вы помните содержит номер перемещаемого предмета после обнуляем «
Item» и «
perenos», и снова перерисовываем инвентарь Также проверяем если итем перенесен на уже занятую ячейку
тут идет уже знакомый цикл поиска первой свободно ячейки, и перемещения
итема в нее. И под конец проверим, перенесен ли объект за инвентарь

сравниваем текущую координату курсора и размер массива по этой координате (домноженным на
50!) и если итем был перенесен за пределы инвентаря, то смотрим что именно мы переносили (переменная «
Item»)
и создаем на месте курсора соответствующий объект И еще один маленький
но не маловажный штрих добавим сохранение\загрузку нашего инвентаря
Все предельно просто при старте загрузить массив из файла (название
кстати можете выбрать любое, и даже точку при желании можно не ставить),
и прорисовать его также и при закрытии приложения, сохраняем массив в
файл
AppPaht здесь указывает на то что файл находится в папке
самого приложения Вот собственно и все, возможно чуть позже сделаю
вторую небольшую часть, скорее дополнение к этой, в которой будут
реализованы стеки, крафт как в майнкрафте и возможность расположить
инвентарь на удобном для вас месте, т.к. этот завязан на верхний левый
угол. Всем спасибо и урачи в проэктах!)