Инветарь на Game Maker - Game Maker - Конструкторы игр, системы разработки игр
Навигация по сайту
Сайт:

Дополнительно:

Файловый архив:

Каталог статей:

Форум:


Категории раздела
Game Maker [27]
Flash [3]
FPS Creator X9, X10 [1]
Scirra Construct [14]
Multimedia Fusion [0]
001 Game Maker, Map 001 [0]
3D RAD [16]
3D Game Studio [1]
Silent Walk FPS Creator [0]
Blender (Блендер) [1]
Game Editor [0]
Остальное [1]
Все остальное, что не попадает ни под одну категорию.

Мини-Опрос
Вы следите за обновлениями конструкторо игр, движков?
Всего ответов: 377

Партнеры сайта
....

Инветарь на Game Maker

07:40
Автор © 30.06.2003 Савельев Дмитрий (SAYMAN)

Сколько раз вы воспламенялись идеей создать шедевр в стиле fallout или какой-нибудь другой навороченной РПГ и останавливали себя по причине недостаточной квалификации? Как правило, эта "недостаточность" выражалась в неспособности прописать код инвентаря. Сами понимаете, этот элемент является неотъемлемой частью любой хорошей ролевой игры и уж тем более, квеста. Именно поэтому темой моего первого урока будет "Инвентарь".

С этой проблемой я столкнулся давным-давно, только начав работу по созданию "Юпитера 516". Конечно, изобретать заново велосипед никому не хочется, поэтому первой идеей, пришедшей мне в голову, было найти примеры, посвященные этой теме, в сети. Двое суток, проведенных во всемирной паутине, не принесли никаких результатов. Таких примеров просто не было. Ну что ж, придется опять напрягать извилины, подумал я и засучив рукава, приступил к делу. Если говорить честно, толком ничего не выходило, да еще и время до обещанного релиза поджимало, одним словом, получилось не совсем то, что хотелось бы.

Произведенный инвентарь представлял собой несколько разноплановых ячеек. О его скудном потенциале я указал в readme файле:

"Одна из его ячеек выделена под спец. возможности, переключаемые левой кнопкой мыши, в другие можно уместить не более: одной брони, одного оружия, одного не вживленного имплантанта , ста препаратов одного вида."

Как видно из выше изложенного, инвентарь имел массу ограничений. К примеру, кто будет довольствоваться одной пушкой? В одних ситуациях полезно иметь гранатомет, в других пистолет с глушителем...

Спустя полтора года мне захотелось вновь испытать свои силы и вот что вышло...

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

На карте должно быть три oI с разными значениями v (вид предмета, находящегося в конкретной ячейке) и vv (количество предметов). Как все это можно осуществить? Ответ прост - надо воспользоваться "опережающим объектом". Пусть им станет s (не забудьте найти для него место на карте). В событие создания (Create) объекта s печатаем такой код:

Code
I=instance_create(x,y,oI)
II=instance_create(x+40,y,oI)
III=instance_create(x+80,y,oI)
//Как видите, наши объекты разделены, и имеют разные имена.

Вводим первоначальные характеристики главного персонажа (того, кто использует предметы):

Code
global.n1=50 //сила
global.n2=200 //ловкость
global.n3=8 //мудрость

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

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

Пускай зовется v123. Повторяем операцию с "опережающим объектом". В событие создания (Create) объекта s впечатываем:

Code
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 и вставляем туда:

Code
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}
// Если в инвентаре уже имеется вещь данного вида, то увеличивается
// количество предметов.

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

Code
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://s7.ucoz.net/sm/24/smile.gif" border="0" align="absmiddle" alt="smile">
//Обозначаем вид предмета и увеличиваем его количество до 1 шт.

Вернемся к oI. В событие рисования (draw) чиркнем:

Code
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 Released) должно происходить следующее:

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

Code
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):

Code
global.n1-=no1
global.n2-=no2
global.n3-=no3
//возвращает все на круги своя.

Ну вот пожалуй и все.
Надеюсь, что изложенные мною выкладки вам пригодятся.
Статья взята с сайта http://quadrathell.cn.ua
Если помогло , поставьте +


Категория: Game Maker | Просмотров: 5528 | Добавил: PaintKiller (12.05.2010) | Рейтинг: 4.7/3
Теги: Game maker, инвентарь
Источник: http://quadrathell.cn.ua/publ/14-1-0-191 |
HTML ссылка на материал:
BB ссылка на материал:
Похожие материалы :
Возможно вам будет интересно:
Молодому игроделу (5)
PHP - Базовые понятия (0)
Blitz 3D - полезная дипломная работа (часть 1) (0)
Работа с файлами. Открытие файла и чтение из него (0)
startDrag или как заставить объект двигаться за мышью? (0)
Обмен информацией по TCP/IP-протоколу (Delphi) (0)
Синтаксис GML в сравнении с Pascal (1)
Про HTML (1)
[Статья] Создаем дополнительное оружие (2)
Полиморфизм, Инкапсуляция и Наследование (0)
Экономика в ммо (2)
Создание света (освещение уровня) (0)
Работа с Сетью в Blitz3D: TCP (0)
Наложение Текстуры На Модель в 3DGS (MED) (0)
Решение проблемы с перевернутыми гранями (1)
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Поиск
Поиск по всему сайту:
Поиск по разделу:

Панель пользователя
Здравствуйте, Гость


Ник:
Пароль:
Запомнить :

Ваш IP: 3.236.18.23

Случайные конструкторы

Случайные движки

Случайные статьи

Статистика
Онлайн всего: 1
Гостей: 1
Пользователей: 0

На сайте были:

При полном или частичном копировании материалов сайта ссылка на Make-Games.ru обязательна. Make-Games.ru © 2008 - 2024 Хостинг от uCoz
Топ Разработка игр