ruggaraxe ruggaraxe

Jusper, Спасибо! По железу средней требовательности. Достаточно Intel Core i5 и 16 Гб ОЗУ и карту типа Geforce 1050. Это так, навскидку. Детально пока не замеряли.

Jusper Jusper

Девблог интересный. Статичный скриншоты очень доставляют.
Сильно игрушка сейчас требовательна к железу?

alexprey alexprey

Скриншоты великолепны!)

yo_serjio yo_serjio

alexprey, редактор зданий да) с возможностью шейрить прессеты другим людям)
На данном этапе можно только пристрои делать, поддержка полной смены архитектуры в будущем планируется)

Mariya Mariya

Всем привет!
Новый ролик на движке. Сегодня мы покажем Вам бытовые сцены из жизни Сырны, и то как мы расставили мебель в ее домике.

RedHelium RedHelium

Работаю над освещением и над игровым контроллером, скоро приступлю к разработке прототипа города. Пока некоторые наброски..

alexprey alexprey

О это что то вроде редактора зданий? Можно самостоятельно новые дома собирать?

yo_serjio yo_serjio

Jusper, yo_serjio, через воркшоп будет потом работать?
Пока что, работает перебросом текстового файла с городом, в теории должно и сообщением передаваться.

Jusper Jusper

yo_serjio, через воркшоп будет потом работать?
Пока что, работает перебросом текстового файла с городом, в теории должно и сообщением передаваться.

yo_serjio yo_serjio

Jusper, подстроить дизайн домов под себя, если не нравится стандартный) можно же будет летать в чужие города, персонализайия в этом плане сыграет только на руку)

Jusper Jusper

Вернул тебе ссылку на ич, невалидная была.
Выглядит оч круто. Надо пощупать. А в чем смысл такого редактора в игре? Что можно будет делать?

Tartal Tartal

Попробовал воплотить злодея-пришельца (раса до сих пор без названия) для Exterminator'а в 3D, скетч которого я недавно показывал здесь:

EfReeZe EfReeZe

SINILIAN, привет, мультфильм "Планета сокровищ". Рекомендую :)

Mariya Mariya

Всем привет!
Сегодня хочу показать Вам полный комплект мебели для домика Сырны.

Wings' might Wings' might

Всем привет друзья, на этой неделе я добавил отображение урона, критические удары; обновил интерфейс магазина и изменил меню способностей

Следить за ежедневными изменениями: https://vk.com/wingsmight

Razz Razz

Сбегаем от контролёра
https://vk.com/iron_meat_game

SINILIAN SINILIAN

С приветом)) Что за мульт или фильмец?
(последний трек если что)

Mariya Mariya

Всем привет!
В мире Сырны появилось второе живое существо - лягушка!

Wings' might Wings' might

Всем привет, друзья)
На этой неделе добавил достижения, статистику и дополнительную информацию в виде отдельных панелек. (можно увидеть на гифке)

Логотип проекта Game Maker

Объекты в Game Maker

Основные понятия

Объекты - это суть Game Maker. Об объектах можно думать, как о некоторой сущности, которая имеет свои характеристики и по-своему реагирует на события, после чего выполняет предписанные разработчиком игры действия. Главный герой в вашей игре будет объектом, все враги - тоже. Различные препятствия и ловушки в игре - также объекты. Объектами будут снаряды, предметы, бонусы. Всякие менеджеры контроля уровней, отображения интерфейса, даже кнопки главного меню могут быть объектами (а могут и не быть, уж как пожелаете). В общем объекты - это основа нашей игры и её динамическая составляющая.

Создать новый объект можно кликнув кнопку на панели инструментов "Create an Object", или кликнув правой кнопкой по папке Objects в панели ресурсов и выбрав пункт "Create Object". Откроется окошко, элементы которого мы сейчас рассмотрим.

Name: Системное имя объекта, используется при разработке.

Sprite: Здесь вы сможете указать стандартный спрайт для объекта. Если вы не укажите спрайт, вы не сможете увидеть объект в игре. Конечно, это не важно, если вы будете рисовать вместо стандартного спрайта спрайт с помощью функций рисования. А может, вам и не нужно, чтобы объект могли увидеть :Р

Visible: Снятие галочки делает объект невидимым, т.е., он прячет стандартный спрайт, и объект перестаёт реагировать на события рисования. Тем не менее, это не деактивирует объект, он по-прежнему реагирует на события столкновения и выполняет все свои действия.

Solid: Сделать объект твёрдым. Свойство твёрдости нужно для того, чтобы в некоторых случаях по-другому обрабатывались события столкновения. Твёрдыми, к примеру, можно сделать стены и платформы.

Depth: "Глубина" объекта на экране. Чем больше это число - тем ниже остальных объектов будет отображаться. Уменьшение этого числа выносит объект на передний план, т.е. ближе к зрителю. Свойство нужно, чтобы правильно позиционировать объекты относительно перспективы - ближние и дальние объекты. Также, всё, что нарисует объект, будет отображаться на той же глубине (или слое, если вам так проще понимать). Так что объекты, которые рисуют, к примеру, интерфейс, должны иметь большую отрицательную глубину. Я, к примеру, для таких объектов просто ставлю -99999 и забываю об этом. Объекты, которые имеют одинаковую глубину, будут отображаться в порядке создания - сверху последние созданные.

Persistent: Делает объект постоянным. Постоянные объекты не исчезают при переходе в другую комнату, они существуют постоянно, постоянно реагируют на события и выполняют действия. Так что, такие объекты нужно удалять вручную. Очень полезное свойство для всяких системных объектов, которые следят за вашей игрой и т.д.

Parrent: Задать родительский объект. Об родительских объектах читайте здесь.

Mask: Задаёт спрайт-маску объекту. Маска используется для детекта коллизий. По-умолчанию, за это отвечает стандартный спрайт, но если вы выбрали другой спрайт в качестве маски, именно он будет использоваться для коллизий, хотя стандартный спрайт будет отображаться по-прежнему. Очень часто нужно, чтобы объект реагировал на столкновения с другими объектами по спрайту совсем другой формы, чем его родной спрайт.

Show Information: Показывает подробную информацию по объекту в отдельном окне и удобочитаемом формате.

Поля Events и Actions: Это списки событий, на которые реагирует данный объект и действия, которые он при этом выполняет. Более подробно об этом читайте здесь.


А теперь самое время поговорить об образцах объектов.

Образцы объектов (Instances)

Если мыслить гуманитарно и при этом представить, что объект - это биологический вид какого-то животного, то образец объекта - это каждый представитель этого вида. Такая маленькая пугливая копия великого и могучего. Именно образцы объектов участвуют в вашей игре. Но, если вы назовёте образец объектом, ошибки не будет (можете даже называть их экземплярами). Однако, иногда важно различать объект и его образцы. Каждый образец - точная копия своего объекта, хотя в процессе игры может измениться и совершенно отличаться от других таких же образцов объекта. Образцы объектов можно создавать и удалять во время игры и делать с ними то, что заблагорассудится. Итак, объект - это основа, образец - конкретный представитель в игре, к которому можно обращаться по номеру.

У каждого образца в игре есть свой уникальный числовой номер (говоря научно, идентификатор), которые начинаются со значений больше 100000. Именно по идентификатору можно обратиться к конкретному образцу в игре, ведь у вас таких образцов может быть очень много, а вам нужен именно вот этот - конкретный я назову его Билли. Так вот, если в комнате есть всего один Билли образец объекта, например, главного героя, вы можете обращаться к нему по имени объекта. Иначе, по имени объекта вы обратитесь лишь к самому первому из созданных образцов. Поэтому, в каждом из образцов есть свойство (встроенная переменная, самих свойств у объектов очень много) под названием id, которую нельзя изменить и которая содержит идентификатор - т.е. Билли уникальный номер этого образца.

Обращение к образцам объектов и особые объекты

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

Примечание: то, о чём я буду рассказывать дальше, касается лишь gml-кода, я понятия не имею, как конкретные образцы идентифицируются через гуи-иконки. Так что крайне приветствуется хоть какие-то познания в программировании.//

Итак, нам нужно, чтобы один образец объекта мог получить или сменить значение какой-то переменной из другого образца этого или совсем другого объекта. Нам не важно какой переменной - ту, что вы огласили сами, например, текущее здоровье или количество патронов, или переменную-свойство.
Давайте из другого образца обратимся к образцу Билли и поменяем свойство x (эта переменная содержит координату объекта по оси Х, можно менять для перемещения объекта).
Если объект у нас в комнате один, всё просто - вспоминаем предыдущий пункт статьи и обращаемся к образцу по имени объекта.

obj_billy.x = 200

Хм, вроде всё просто. Как видите, мы просто написали имя объекта, а через точку - его переменную и тут же изменили её. Это же работает и в обратную сторону:

a = obj_billy.x

Надеюсь, вы догадались, что мы передали в переменную а значение координаты х образца Билли? Вроде понятно.
Так, но вот что делать, если образцов в комнате появилось несколько? А вот тут и начинаются пляски с бубном. Есть разные варианты идентифицировать конкретный образец.
Например, вы можете в скобках написать его уникальный номер, если вы его знаете. Обычно, это применимо образцам, которые вы расставили в редакторе комнаты - там вы сможете увидеть номер образца на нижней панели, наведя на него курсор.

(100500).x = 200

Это очень неудобный способ, не так ли?
Тогда допустим, вы создаёте объекты в комнате в процессе игры. Самый лучший вариант - записать только что созданный образец в переменную. Образцы создаются с помощью функции instance_create(x, y, obj). Функция возвращает идентификатор нового образца, т.е. его id.

neb = instance_create(250, 350, obj_billy)

Теперь в переменной neb у нас содержится только что созданный образец Билли. Вот теперь мы и поменяем ему x (Примечание: хотя, по сути, это бессмысленно. Ведь мы же создали образец уже по нужным нам координатам х:250, y:350. Но так тому и быть. Кстати, не воспринимайте буквально слова об образце в переменной. На самом деле, в переменной записан идентификатор образца. Нюансы движка. Пока не вникайте, я выразился так для простоты):

neb.x = 200

Совсем другое дело! Следующий код также будет верным и работать аналогично:

(instance_create(250, 350, obj_billy)).x = 200

В этом случае мы просто больше не сможем обратиться к Билли снова, поскольку у нас нигде не будет записан его идентификатор. Однако, иногда большего и не требуется.
Или вовсе наркомания так:

neb = instance_create(250, 350, obj_billy)
bub = neb
bub.id.x = 200

Ещё для идентификации образцов можно использовать конструкцию with. Есть также и другие способы идентификации, но для начала подойдут и эти.


Пора поговорить об особых объектах: self, other, noone, all. Они выполняют особую функцию и облегчают нам жизнь хоть в чём-то*

  • self - это сам же объект. Вы не поверите, как часто это может понадобиться. Ведь образцу может понадобиться иногда обращаться к самому себе!**
  • other - это объект, который столкнулся с нашим объектом (событие коллизии). Ещё, объектом other будет выступать объект вне конструкции with, тот, который её вызвал, для объектов внутри конструкции (и зачем вы это прочитали).
  • noone - ни один объект, или несуществующий объект с id = -4. Тоже иногда может пригодиться.
  • all - все образцы в игре. Смотрим пример:
all.x = 200

Теперь координата Х всех образцов всех объектов в игре станет равна 200.

* Убер лжот.//** Здесь экспрессия для пущей драматичности момента. На самом деле, не всё так страшно.//

Послесловие

В общем, я думаю, для начала новичку вполне достаточно этой информации, понимание всех нюансов придёт со временем. Кое-что может показаться сложным, но не настолько, чтобы немного погодя в этом не разобраться самому. Главное - практика, опыт и понимание придут со временем.
Важно помнить, что объекты - это наше всё, именно благодаря им мы можем создать игру, описать ими геймплей и игровую логику.



Хорошо написано что такое объекты и инстансы. И ведь применимо к любому ооп-языку. Классно, для новичков - самое то.