Вторник, 23 Апреля 2024, 20:59

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

Меню сайта
Категории каталога
Создание игр [355]
Статьи об общих понятиях связанных с созданием игр.
Программирование [82]
Гайды по программированию на разных ЯП.
Движки и Гейммейкеры [145]
Статьи о программах для создания игр, уроки и описания.
Софт [43]
Различные программы, в том числе в помощь игроделам.
2D-графика [14]
Уроки по рисованию, растр, пиксель-арт, создание спрайтов и пр.
3D-графика [16]
Уроки по моделированию, ландшафт, модели, текстурирование и пр.
Моддинг игр [5]
Модификация компьютерных игр, создание дополнений, перевод, хакинг.
Игры [161]
Статьи об играх, в том числе и сделанных на гейммейкерах.
Разное [129]
Статьи, которые не вошли в определённые разделы.
Наш опрос
Какой ЯП вы знаете?
Всего ответов: 27890
Главная » Статьи » Движки и Гейммейкеры

Создание простого инвентаря на Game Maker. Часть 2.
Всем снова здравствуйте! С вами Fade. В этой части урока мы с вами продолжим создание инвентаря. В первой части мы познакомились с основами инвентаря и простейшей его реализацией. Итак, чем мы займёмся.. Проведём оптимизацию инвентаря и реализуем складывание вещей в стопку. Это всё можно будет сделать всего-лишь одним объектом, ну и, конечно же, предметами, нажимая на которые, они будут добавляться в инвентарь. Основы создания, надеюсь, вы поняли, поэтому расскажу коротко. Как обычно создаём новый проект, создаём наш старый знакомый объект inv, и в Create пишем такой вот код:
Code
w = 3;
h = 3;
for(i = 0; i < w; i += 1) {
   for(j = 0; j < h; j += 1) {
      Spr[i, j] = -1;
      Amount[i, j] = 1;
   }
}

Получив знания с первого урока, я думаю, вы знаете, за что отвечает каждая строка данного кода. Но, как мы видим, код дополнен двумя строками. Давайте их разберём.
Spr[i, j] = -1;
Эта строка отвечает за спрайт объекта, лежащего в конкретной ячейке. Циклом и массивом мы каждой ячейке присваиваем "нулевой" спрайт, т.е. все ячейки пусты.
Amount[i, j] = 1;
Эта строка отвечает за количество объектов в ячейках. Каждой из всех ячеек мы присваиваем кол-во 1. Так, с этим разобрались. Теперь нам нужно сделать отрисовку спрайтов в ячейках. Создаём событие Draw и пишем код:

Code
for(i = 0; i < w; i += 1) {
   for(j = 0; j < h; j += 1) {
      draw_set_alpha(0.2);
      draw_rectangle(i * 32, j * 32, i * 32 + 32, j * 32 + 32, 0);
      draw_set_alpha(1);
      draw_rectangle(i * 32, j * 32, i * 32 + 32, j * 32 + 32, 1);
      if (Spr[i, j] != -1) draw_sprite(Spr[i, j], -1, i * 32 + 16, j * 32 + 16)
      if (Amount[i, j] > 1) draw_text(i * 32 + 16, j * 32 + 16, Amount[i, j])
   }
}

Здесь всё устроено немного иначе. Сначала мы инициализируем цикл, проверяющий все ячейки. Далее отрисовываем ячейки. Думаю, об этом принципе рисования вы узнали из первого урока, поэтому зацикливать внимание я на этом не буду. Потом идёт отрисовка спрайта объекта в занятых ячейках. И последнее, что мы проверяем, это отрисовку количества объектов в определённой ячейке. В данном случае рисовать количество мы будем только в том случае, если в ячейке находится больше одного объекта.

Основа нашего с вами инвентаря готова. Всё, что нам осталось, осуществить подбор и складывание предметов в инвентарь. Создаём спрайты s_item1s_item2s_item3, объекты и назначаете им соответствующие спрайты. Для того, чтобы не пришлось писать много кода в каждый объект, мы напишем скрипт. Создаём скрипт и назовём его add_item и в нём пишем следующий код:

Code
for(j = 0; j < inv.h; j += 1) {
   for(i = 0; i < inv.w; i += 1) {
      if (inv.Spr[i, j] == -1) {
         inv.Spr[i, j] = sprite_index;
         instance_destroy();
         exit;
      } else if (inv.Spr[i, j] == sprite_index) {
         inv.Amount[i, j] += 1;
         instance_destroy();
         exit;
      }
   }
}

Всё также запускаем цикл, который проверяет все ячейки инвентаря. Потом проверяем наличие объекта в ячейках, пока не находим пустую, и в переменную найденной ячейки записываем спрайт подобранного объекта, уничтожаем его и выходим из цикла (В данной ситуации это необходимо!). Иначе, если при проверке был обнаружен объект, который мы хотим подобрать, то тогда увеличиваем количество предметов в ячейке с найденным предметов, уничтожаем его и также выходим из цикла. Всё, наш скрипт написан. Теперь осталось его, как бы так сказать, "привести в действие". В каждый созданный объект (o_item1o_item2... их может быть любое кол-во, на ваше усмотрение) в событие Left Pressed пишем инициализацию нашего написанного скрипта:

Code
add_item();

Готово. Теперь создаём комнату, размещаем объект inv в левый верхний угол комнаты и произвольно размещаем предметы. Тестируем на работоспособность и радуемся тому, что научились создавать крутой, но в то же время простой для понимания инвентарь. 
Исходник к статье: Скачать

Всё, всем спасибо за внимание!
Fade
Категория: Движки и Гейммейкеры | Добавил: FadeBaker (12 Июля 2011)
Просмотров: 16708 | Комментарии: 6 | Рейтинг: 4.4/10 |
Теги: уроки, Как создать инвентарь, Реализация инвентаря, Статьи по Game Maker, туториал, Урок, кодинг, GM, Game Maker, GML
Дополнительные опции:
Также если вы считаете, что данный материал мог быть интересен и полезен кому-то из ваших друзей, то вы бы могли посоветовать его, отправив сообщение на e-mail друга:

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

Всего комментариев: 6
+1-
6 Mundal   (11 Июля 2022 14:28) [Материал]
выдаёт ошибку, хз чё не так
___________________________________________

ERROR in
action number 1
of Create Event
for object <undefined>:

Unable to find any instance for object index '2' name 'inv'
at gml_GlobalScript_add_item (line 5) - for(j = 0; j < inv.h; j += 1) {

gml_GlobalScript_add_item (line 5)
deal

+0-
5 MORFIUSE   (10 Июня 2017 08:08) [Материал]
MORFIUSEЧитайте внимательней и всё получится ^_^

+1-
1 Gcuper   (31 Августа 2012 15:11) [Материал]
GcuperERROR
obj_case
Trying to draw non-existing sprite????

+1-
2 rushan98   (02 Сентября 2012 14:10) [Материал]
rushan98там же вроде нужно объекту обж_кейс
поставить пустой спрайт 32х32

+1-
3 Gcuper   (08 Сентября 2012 13:35) [Материал]
GcuperВсё правильно делал.5 раз сверил.Нифига.

+3-
4 Zerlin   (24 Октября 2012 12:59) [Материал]
Zerlinнужно зайти в свойства obj_case и присвоить(выбрать из списка в окне спрайт) ему спрайт.

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Поиск по сайту
10 случ. движков
  • MANU
  • Reality Factory
  • Construct Classic
  • WindMill
  • Frank Engine
  • Flicksy
  • Mark IV Engine
  • Alice
  • GloryLands
  • cocos3d
  • Друзья сайта
    Игровой форум GFAQ.ru Перевод консольных игр
    Все права сохранены. GcUp.ru © 2008-2024 Рейтинг