Среда, 21 Ноября 2018, 19:30

Приветствую Вас Гость

Меню сайта
Категории каталога
Создание игр [314]
Статьи об общих понятиях связанных с созданием игр.
Программирование [69]
Гайды по программированию на разных ЯП.
Движки и Гейммейкеры [124]
Статьи о программах для создания игр, уроки и описания.
Софт [27]
Различные программы, в том числе в помощь игроделам.
2D-графика [11]
Уроки по рисованию, растр, пиксель-арт, создание спрайтов и пр.
3D-графика [10]
Уроки по моделированию, ландшафт, модели, текстурирование и пр.
Моддинг игр [5]
Модификация компьютерных игр, создание дополнений, перевод, хакинг.
Игры [95]
Статьи об играх, в том числе и сделанных на гейммейкерах.
Разное [71]
Статьи, которые не вошли в определённые разделы.
Наш опрос
Сколько вы уже создали своих игр?
Всего ответов: 16256
Главная » Статьи » Создание игр

Создание инвентаря в GameMaker
Здравствуйте! Представьте, вы создаёте RPG игру, и вам нужен инвентарь! Ведь без инвентаря это и не RPG вовсе будет. В этой статье я вам про это и расскажу. Ну что же, открываем уши и внимательно слушаем!

Создаем первый объект и называем его oI (старайтесь давать названия покороче т.к. в коде вам еще не раз предстоит ссылаться на них). Объекту присваиваем спрайт. Решите сразу, из скольких клеток (ячеек) будет состоять ваш инвентарь. Для примера нам хватит трех. Здесь следует отметить, что все три будут являться разными интерпретациями созданного раннее объкта oI.

На карте должно быть три oI с разными значениями v (вид предмета, находящегося в конкретной ячейке) и vv (количество предметов). Как все это можно осуществить? Ответ прост - надо воспользоваться "опережающим объектом". Пусть им станет s (не забудьте найти для него место на карте). В событие создания (Create) объекта s печатаем такой код:
Код
I=instance_create(x,y,oI)
II=instance_create(x+40,y,oI)
III=instance_create(x+80,y,oI)
//Как видите, наши объекты разделены, и имеют разные имена.


Вводим первоначальные характеристики главного персонажа (того, кто использует предметы):
Код
global.n1=50 //сила
global.n2=200 //ловкость
global.n3=8 //мудрость


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

Выделять под каждую вещь объект - работа чересчур тяжкая, поэтому мы создадим один общий.

Пускай зовется v123. Повторяем операцию с "опережающим объектом". В событие создания (Create) объекта s впечатываем:
Код
v=instance_create(112,31,v123) // координаты могут быть любыми.
v.vvv=1 // вещь 1 типа

v=instance_create(112,45,v123)
v.vvv=1 // вещь 1 типа

v=instance_create(142,31,v123)
v.vvv=2 // вещь 2 типа

v=instance_create(152,31,v123)
v.vvv=3 // вещь 3 типа


Ну вот, другое дело. Далее переключаемся на событие отпускания левой кнопки мыши (Left Released) объекта v123 и вставляем туда:
Код
if s.I.v=vvv{s.I.vv+=1;instance_destroy();exit}
if s.II.v=vvv{s.II.vv+=1;instance_destroy();exit}
if s.III.v=vvv{s.III.vv+=1;instance_destroy();exit}
// Если в инвентаре уже имеется вещь данного вида, то увеличивается
// количество предметов.

if s.I.v!=0 && s.II.v!=0 && s.III.v!=0
{show_message('Инвентарь заполнен!');exit}
// Если свободного места вдруг не обнаружится, выводим сообщение
// "Инвентарь заполнен!"

if s.I.v=0{s.I.vv=1;s.I.v=vvv;instance_destroy();exit}
if s.II.v=0{s.II.vv=1;s.II.v=vvv;instance_destroy();exit}
if s.III.v=0{s.III.vv=1;s.III.v=vvv;instance_destroy();exit}
//Для надежности второй раз проверяем условие не занятости клеток <img src="http://s12.ucoz.net/sm/1/smile.gif" border="0" align="absmiddle" alt="smile" />
//Обозначаем вид предмета и увеличиваем его количество до 1 шт.


Вернемся к oI. В событие рисования (draw) чиркнем:
Код
draw_sprite(s0,0,x,y) //спрайт клетки
if vv>0
{
if v=1{draw_sprite(s1,-1,x,y)} //если вещь 1 типа, рисуем соответствующий спрайт
if v=2{draw_sprite(s2,-1,x,y)} //если вещь 2 типа, рисуем соответствующий спрайт
if v=3{draw_sprite(s3,-1,x,y)} //если вещь 3 типа, рисуем соответствующий спрайт

if vv>1 {draw_text(x+19,y+20,string(vv))}
//если количество вещичек одного вида больше единицы, отображаем значение vv.
}
else{v=0}


Осталось только разобрать использование приобретенных вещей. Что по-вашему, происходит когда вы одеваете на главного персонажа броню? Во-первых, изменяется часть характеристик героя. Во-вторых, активированный предмет (в нашем случае броня) каким-либо образом выделяется или исчезает, превращаясь в крупное изображение. Стало быть и нам как-то нужно выделить используемую вещь. По аналогии с oI создаем объект oV (клавиша "использовать"). При нажатиии на нее левой кнопкой мыши (Left Preesed) должно происходить следующее:
Код
//активацию предмета можно показывать разными способами, в этом уроке
// ограничимся появлением у задействованной вещи рамки. Объект ac1 для
//этого дела как раз сгодится.

if instance_number(ac1)>0{with(ac1){instance_destroy()}}
//если количество "рамок" на карте больше 0, удаляем их к черту, во избежании
// активации сразу нескольких предметов.

ni=instance_create(x,y-40,ac1)
//создаем рамку у выбранного предмета.

on=instance_nearest(x+5,y-5,oI)
//определяем самую ближнюю клетку(oI) и даем ей кодовое имя on,
// связывая таким образом кнопку "использовать"(oV) с находящейся выше ячейкой.

if on.v=1
//Если в ближайшей ячейке находится вещь 1 типа, влияние на характеристики будет таким:

{
ni.no1=-5 //сила-5
ni.no2=234 //ловкость+234
ni.no3=1 //мудрость+1
}

if on.v=2//изменение показателей для вещи 2 типа
{
ni.no1=26
ni.no2=-26
ni.no3=26
}

if on.v=3//изменение показателей для вещи 3 типа
{
ni.no1=9
ni.no2=0
ni.no3=0
}


В событие создания (Create) рамки(ac1):
Код
global.n1+=no1
global.n2+=no2
global.n3+=no3
//изменяет характеристики г. персонажа.


А в событие ее уничтожения (Destroy):
Код
global.n1-=no1
global.n2-=no2
global.n3-=no3
//возвращает все на круги своя.


И в заключение: Мы сегодня создали инвентарь и можем гордится собой, так как инвентарь не такая уж и простая работа. Удачи в создании игр! До встречи!
Категория: Создание игр | Добавил: KaramBino (27 Ноября 2013)
Просмотров: 9211 | Комментарии: 7 | Рейтинг: 4.1/7 |
Теги: урок, Код, инвентарь, GM, Game Maker, GML, Rpg, Создание инвентаря, gamemaker, Ролевая игра
Дополнительные опции:
Также если вы считаете, что данный материал мог быть интересен и полезен кому-то из ваших друзей, то вы бы могли посоветовать его, отправив сообщение на e-mail друга:

Игровые объявления и предложения:
Если вас заинтересовал материал «Создание инвентаря в GameMaker», и вы бы хотели прочесть что-то на эту же тему, то вы можете воспользоваться списком схожих материалов ниже. Данный список сформирован автоматически по тематическим меткам раздела. Предлагаются такие схожие материалы: Если вы ведёте свой блог, микроблог, либо участвуете в какой-то популярной социальной сети, то вы можете быстро поделиться данной заметкой со своими друзьями и посетителями.

Всего комментариев: 7
+3-
7 dddmax   (25 Декабря 2013 06:50)
dddmax(старайтесь давать названия покороче т.к. в коде вам еще не раз предстоит ссылаться на них)
Почему подавляющее количество пользователей ГМ так советуют? Переменным (обьектам и т.д.) нужно давать осмыссленные имена. Тем более вредно советовать так делать в статье. Через неделю, две ты забыл что значит oI и что делать дальше? А если код читает другой человек который изначально не знал. Не ленитесь написать несколько лишних символов, этим облегчите жизнь себе и другим smile

+1-
6 beril   (02 Декабря 2013 19:38)
berilИсходник бы

+-8-
5 KaramBino   (29 Ноября 2013 06:16)
KaramBinoКод не мой.

+1-
4 FadeBaker   (28 Ноября 2013 17:44)
Статья для новичков хорошая, но где-то я давно ее уже видел. Неплохо было бы указать источник, откуда копировал.
Что касаемо самой статьи, то я считаю, что слишком громоздок код, можно было бы и попроще сделать.
7 / 10.

+0-
3 KaramBino   (28 Ноября 2013 15:29)
KaramBinoСпасибо. А ты всё разобрал? Всё ли понял?

+1-
2 Keed   (28 Ноября 2013 15:25)
KeedОтличная! smile

+1-
1 KaramBino   (27 Ноября 2013 15:30)
KaramBinoНу как статья?

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Поиск по сайту
10 случ. движков
  • Doomsday
  • Lumberyard
  • PICO-8
  • Asphyre Sphinx
  • Doom Classic iOS
  • BatteryTech
  • Orx
  • SkyXEngine
  • XtremeWorlds
  • SimpleJ
  • Друзья сайта
    Игровой форум GFAQ.ru Перевод консольных игр
    Все права сохранены. GcUp.ru © 2008-2018 Рейтинг