ГлавнаяРегистрацияВход Среда
22.11.2017
12:14
Приветствую Вас Гость | RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 11
Форумы - общение на любые темы! » Construct Classic » Уроки пользователей » "Массивный" инвентарь (или инвентарь на массиве)
"Массивный" инвентарь
AlttarBoyДата: Воскресенье, 11.12.2011, 22:28 | Сообщение # 1
Бешеный программер
Сообщений: 102
Награды: 2
Репутация: 85
Статус: Offline
Итак урок рассчитан на то, что вы уже знакомы с
массивами,( во всяком случае это название вас не пугает)) Преступим для
начала нам понадобится курсор, но не простой, необходимо чтобы он
двигался по ячейкам нашего инвентаря для этого добавляем соответствующий
спрайт, и переключаемся на 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 здесь указывает на то что файл находится в папке
самого приложения Вот собственно и все, возможно чуть позже сделаю
вторую небольшую часть, скорее дополнение к этой, в которой будут
реализованы стеки, крафт как в майнкрафте и возможность расположить
инвентарь на удобном для вас месте, т.к. этот завязан на верхний левый
угол. Всем спасибо и урачи в проэктах!)
Прикрепления: inv.cap(116Kb)


Сообщение отредактировал AlttarBoy - Воскресенье, 11.12.2011, 22:29
 
GordonGreenmanДата: Понедельник, 12.12.2011, 14:43 | Сообщение # 2
Сержант
Сообщений: 31
Награды: 1
Репутация: 3
Статус: Offline
УРААА!!! буду ждать вторую часть)
только ты незабудь сделать чтобы при перетаскивании было видно что перетаскиваешь)


Друг ты устал? Ляг, отдохни! Но ты уже не будешь первым }=))

Сообщение отредактировал GordonGreenman - Понедельник, 12.12.2011, 17:05
 
AHTuCTATuKДата: Понедельник, 12.12.2011, 14:56 | Сообщение # 3
добрый модер
Сообщений: 281
Награды: 3
Репутация: 151
Статус: Offline
Очень круто, будем использовать...


ЧИТАЕМ ПРАВИЛА ФОРУМА
 
TPOoJlJlbДата: Среда, 14.12.2011, 17:53 | Сообщение # 4
Рядовой
Сообщений: 9
Награды: 3
Репутация: 4
Статус: Offline
Прикольно. Наконец, решился сделать на C2 клон PvZ с крафтингом. Щас подумаю, ка пришить крафт к этому, а к лету (а времечка-то мало, хе-хе) может доделаю.
 
Форумы - общение на любые темы! » Construct Classic » Уроки пользователей » "Массивный" инвентарь (или инвентарь на массиве)
Страница 1 из 11
Поиск:


thevic.ru © 2017Хостинг от uCoz