20 dec
2013

Ресурсы в Game Maker

Added by , published
Раздел:
Раздел 1

Начнём с простого

Итак, ресурсы игры - это всё, что нам нужно для построения самой игры. Все ресурсы зашиваются в исполняемый exe-файл игры. Список ресурсов находится в левой части окна GM, где они могут быть разделены по подпапкам для удобства сортировки. Создаются ресурсы через команды меню "Resourses" или соответствующими кнопками на панели инструментов. Стоп-стоп, это только внутренние ресурсы игры. Никто вам не запрещал использовать внешние файлы, но сейчас речь не о них.

Основные ресурсы

Вот какие ресурсы есть в Game Maker:
В правилах хорошего тона принято все имена ресурсов начинать с приставки, например, "spr_", это упрощает вам и другим понимание структуры вашей игры, хотя это сугубо индивидуально. Однако, если вы назовёте, например, спрайт именем "player" и точно так же объект таким же именем, это может вызвать конфликты. Имейте ввиду. Я добавил эти префиксы к описанию ресурсов. Нужно же приучать к хорошему, не так ли?

  • Sprites (spr_имя_спрайта): Спрайты - это самые обычные изображения, поддерживаются множество различных форматов, могут быть анимироваными. В GM есть встроенный редактор изображений, который чуть эффективнее пэинта и чуть менее фотошопа. Но вам никто не запрещал использовать внешние редакторы, тот же фотошоп, всё делается в настройках GM. Там же можно настроить спрайты, задать им множество необходимых параметров (например, orign, точку центра спрайта), и так далее.

  • Sounds (snd_имя_звука): Звуки. По-умолчанию поддерживаются только *.wav и *.mp3 форматы, но с помощью пакетов расширений можно проигрывать и множество других форматов, например, *.ogg. При добавлении звука, откроется окошко с его настройками, где вы сможете загрузить внешний звуковой файл, добавить ему всякие эффекты вроде эхо, настроить его громкость и прочее.

  • Backgrounds (back_имя_заднего_фона): Это ресурсы задних фонов, по своей сути, тоже изображения любого доступного формата. От спрайтов отличаются тем, что они не анимированы. Задние фоны используются, например, для отображения неба в платформерах, земли и травы для игр с видом сверху. У задних фонов есть ещё одно назначение - они могут использоваться в виде тайлов (tile). Т.е., специально размеченное изображение можно разделить на квадратики, которые потом использовать в качестве тайлов. Нужно помнить, что в exe-шник зашивается несжатая версия изображения, так что не рекомендуется использовать большие изображения без сжатия, особенно форматов *.blp и *.png, иначе вес исполняемого файла вырастет пропорционально. Однако, иногда качество или прозрачный фон имеют первостепенное значение.

  • Paths (path_имя_пути): Это ресурс путей. С помощью встроенного редактора вы сможете нарисовать особенный путь, по которому смогут двигаться различные объекты. Однако, они не имеют отношения к поиску пути, вы просто предопределяете траекторию движения, вот и всё. В окне редактора доступно много различных настроек по редактированию точек пути и прочих параметров.
Опции Straight Lines/Smooth curve определяют форму пути - прямыми линиями от точки к точке, или закруглённый путь. Параметр Precision может принимать значения от 1 до 8 и определяет степень скругления пути при опции Smooth curve. Галочка Closed делает путь замкнутым, т.е. точка конца пути соединяется с точкой начала.

  • Scripts (scr_имя_скрипта): Ресурс скриптов. В каком-то смысле скрипты можно воспринимать как функции, поскольку их вызов выглядит одинаково, например функция draw_text(), и скрипт scr_omg_i_made_it(). Каждый скрипт может содержать в себе gml-код, а вызывать и передавать в них параметры можно аналогично функциям.
Давайте рассмотрим немного подробнее, раз уж затронули эту тему.
Скажем, создадим скрипт, который будет не только выполнять какие-то действия, но и принимать аргументы и возвращать результат. Для этого нам идеально подойдёт скрипт расстояния между двумя точками. Он будет принимать координаты первой точки x1,y1, координаты второй точки x2,y2, и возвращать, собственно, расстояние между ними. Назовём его scr_get_dist_btw_points().
Вызов скрипта. Давайте передадим в него координаты объекта obj_player и координаты объекта obj_monster, а результат запишем в переменную dbpam:
  dbpam=scr_get_dist_btw_points( obj_player.x, obj_player.y, obj_monster.x, obj_monster.y )
Код скрипта scr_get_dist_btw_points():
//argument0 - координата x1
//argument1 - координата y1
//argument2 - координата x2
//argument3 - координата y2
var dx,dy,dd;
dx = argument2 - argument0
dy = argument3 - argument1
dd=sqrt(dx*dx+dy*dy)
if(dd>=0)
 {return dd;}
else
 {return -1;}
Как видим, во встроенные переменные argument0, argument1, argument2, argument3, передаются наши координаты, в том порядке, в котором мы прописали при вызове скрипта. Т.е. в переменную argument0 запишется значение obj_player.x, в argument1 - obj_player.y, и т.д.
Таких аргументов можно передавать до шестнадцати штук одновременно, как и в обычных функциях. Кому-то такой способ передачи аргументов кажется удобным, кому-то, мягко говоря, не очень.
Также, скрипты всегда срабатывают локально для того объекта, из которого его вызвали. Например, вы можете вызвать скрипт для объекта игрока, который, скажем, просто задаёт значения переменных для этого объекта. Если вы вызовите этот же скрипт из объекта монстра, он получит такой же набор локальных только для него переменных. Помните об этом.

  • Fonts (font_имя_шрифта): Ресурс шрифтов. Здесь отображаются различные системные шрифты, которые можно использовать у себя в игре. Шрифты используются в действиях рисования текста и задаются с помощью функции draw_set_font( font_name ). В окне настройки шрифта можно указать его размер, сделать его жирным и наклонным. Также, стоит указать такую важную вещь, как Character range. Он определяет, из какого промежутка будут браться символы шрифта. К примеру, если шрифт содержит также кирилицу, нужно нажать на кнопочку "All", что установит промежуток на максимальный - от 0 до 255. Я вообще по-умолчанию всегда пользуюсь именно этим параметром и горя не знаю.
Стоит помнить любопытную и не очень приятную вещь. Если у вас на компьютере есть какой-то скачанный, особенный шрифт, а у пользователя, который скачал игру, его на компьютере нет, вместо него может отображаться стандартный Arial. Если такое происходит, нужно добавить файл вашего шрифта в исполняемый файл игры, через включаемые файлы (included files), которые, кстати, тоже являются ресурсами игры.

  • Time Lines (tml_имя_таймлайна): Ресурс таймлайнов. Таймлайны позволяют создать последовательность таймеров (не в секундах, а игровых шагах - важно не забывать), и задать нужные действия каждому истёкшему таймеру. Довольно удобно, чтобы делать заставки, к примеру.


Rooms/Комнаты

Rooms (room_имя_комнаты): Ресурс комнат. Комнаты - это игровые уровни. Точнее, это одно из их назначений. Игра может состоять минимум из одной комнаты. Можно использовать одну комнату, чтобы создать множество уровней (например, сделать её огромной), можно использовать каждую комнату как игровой уровень. Между комнатами можно переходить с помощью действий или специальных функций. Комнаты нужно рассмотреть подробней. Когда вы создаёте комнату, открывается такое окошко, в правой части окна мы видим "рабочую" зону - это то, как выглядит наша комната, здесь мы можно размещать объекты и тайлы.
В левой части окна - панель с закладками. Рассмотрим каждую закладку в отдельности.
Закладка Settings
Это настройки комнаты.
Name - системное имя комнаты, используется при разработке.
Caption of the room - если в настройках игры вы не устанавливали полноэкранный режим, эта надпись будет использоваться вместо заголовка окна. По-умолчанию там стоит название игры. Caption комнат можно менять через код.
Width/Height - Ширина/высота комнаты в пикселях. Если игра работает в оконном режиме, и не задействованы виды (views), размер окна игры будет равен размеру текущей комнаты.
Speed - Скорость комнаты в шагах, или проще, FPS. Скорость игры всегда равна скорости текущей комнаты. К примеру, в комнате главного меню у вас может быть установлена скорость в 20 fps, а уже для игровых уровней - 60 fps.
Persistent - если галочка стоит, комната будет являться постоянной. Все объекты и события которые в ней произойдут будут постоянными и будут происходить на протяжении всей игры. Т.е, если брать в пример игровой уровень в рпг, игрок может покинуть комнату, и вернувшись туда, обнаружит, что всё на прежнем месте - сундуки уже вскрыты, некоторые монстры убиты, и т.д. Иначе, если комната непостоянна, генерация всех объектов произойдёт заново, так, как вы расставили их в редакторе. В общем, произойдёт полный рестарт комнаты. Свойство постоянности, на самом деле, нужно в довольно узком кругу игр, ведь отдельные объекты тоже можно делать постоянными, что находит более частое применение.
Creation code - сюда можно ввести код, который будет выполняться каждый раз при запуске комнаты, если она непостоянна. Если наоборот - код выполнится лишь один раз, когда комнату запустят в первый раз.
Закладка Views
Закладка настроек видов, или игровых камер. Виды можно перемещать по комнате (и за её пределами, но только с помощью кода), если сама комната больше, чем игровое окно, или вид. Если комната меньше, чем вид, она и игровое окно растянется до размера вида.
Вы можете использовать до восьми игровых видов в игре. Зачем столько нужно? В первую очередь, GM позволяет сделать сплит скрин. Вот и всё. А в одиночной игре вам редко когда понадобится использовать более, чем один вид.
Enable the use of Views - Разрешить использование видов в этой комнате.
Visible, when room starts - Выделив в списке выше вид, этой галочкой вы активируете использование этого вида, при этом он становится выделенным жирным. Все настройки ниже будут устанавливаться персонально для выделенного в списке вида.
View in room: X/Y W/H - X и Y координаты вида при старте комнаты. W/H - Ширина и высота вида в пикселях. Может зависеть от разрешения мониторов игроков, потому, устанавливайте такие значения, которые будут оптимальными для большинства игроков. В окошке маленького размера не всегда удобно играть. Эта проблема частично исчезает, если вы делаете игру на полный экран.
Port on screen - эта область на экране, которая будет отображать ваш вид. Чтобы не было проблем, эти поля стоит заполнить точно так же, как и поля выше, поскольку именно они влияют на размер окна.
Object following - это поле позволяет установить объект, за которым вид должен следовать. Hbor/Vbor - немного сложнее объяснить, в общем, это горизонтальная и вертикальная границы, когда объект слежения пересечёт их, вид сдвинется со скоростью Hsp/Vsp. Почему отрицательные? Потому что нам нужно, чтобы объект подходил к краям границ, а не выходил за вид. А как сделать, чтобы вид следил по центру за объектом? Я лично всегда просто вписываю значения 9999. Вряд ли вы когда-либо будете использовать вид шириной или высотой более 9999 :) Однако, небольшие значения, вроде -32 (по-умолчанию) позволяют сделать камеры, как в RTS - нужно лишь каждый шаг перемещать объект слежения в позицию мыши. Теперь, поднося курсор к границам камеры ближе, чем на 32 пикселя, вид будет сдвигаться в нужном вам направлении. В общем, муторно объяснил, зато всё очень просто на практике.
Закладка Backgrounds
Это закладка настроек задних фонов комнаты.
Draw background color - Если вы не используете в комнате задние фоны (например, это просто комната меню), включение этой галочки будет отображать вместо фона комнаты выбранный вами на панельке Color цвет. В целях производительности рекомендуют отключать эту опцию, если вы используете непрозрачный задний фон, особенно, если комната большая. Отключение этой галочки сделает фон просто чёрным.
Visible when room starts - Выделив в списке выше один из восьми задних фонов, это галочка активирует его отображение. Все последующие опции будут настраиваться для выделенного фона.
Foreground image - Отобразить фон поверх всех объектов. Может, иногда эта опция и нужна, хз.
Background List - В этом списке вы можете выбрать изображение заднего фона, которые находятся у вас в ресурсах. Т.е., здесь вы задаёте сам задний фон.
Tile Hor./Vert. - Если фон небольшой, и не покрывает всю комнату, эти галочки активируют его непрерывное наложение друг за другом по горизонтали/вертикали, пока эти плитки не заполнять всю комнату.
Stretch - Растянуть или сжать фон до размеров комнаты. Чаще всего это выглядит действительно ужасно.
Hor./Vert. Speed - Здесь вы можете задать горизонтальную/вертикальную скорость фона (скорости могут быть отрицательными, что заставит фон двигаться в противоположном направлении). Зачем это, спросите вы? Для движущихся фонов, конечно же. Например, есть у вас в платформере небо. Но когда оно не двигается, это выглядит скучно. Вы можете задать фону горизонтальную скорость, и вуаля, облака поплыли по небу! Однако, работает это только тогда, когда начало и конец изображения совпадают, чтобы получалась непрерывная циклическая картинка. Так же работают и изометрические трюки - например, вы используете три фона одновременно - неба, гор и леса. Небо, понятное дело, располагается последним, т.е., в самом низу, выше - горы, в самом верху лес. Чтобы создать иллюзию движения, нужно задать высокую горизонтальную скорость фону, что ближе всего к наблюдателю - это лес. Горам задать скорость намного ниже, и совсем низкую - небу. Этот эффект иллюзии движения с помощью фонов используется во многих 2D-играх.
Закладки Objects и Tiles - их можно пропустить, там нет ничего такого, что сложно выяснить самому. С помощью этих закладок вы сможете расставить в комнате объекты и тайлы.

Прочие ресурсы

К прочим ресурсам игры относят триггеры, константы, включаемые файлы и пакеты расширений.
  • Триггеры - начиная с версии 8, триггеры - это новые события, которые можно добавлять объектам. Чуть больше про триггеры можно узнать здесь. Окно редактирования триггеров открывается с помощью команды Define Triggers меню Resources.
  • Константы - Они и в Африке константы. Могут быть удобны тем, что в коде подсвечиваются особым цветом. Окно редактирования констант открывается с помощью команды Define Constants меню Resources.
  • Включаемые файлы - В проект игры можно добавить внешние файлы, которые будут зашиты в exe-файл игры и извлечены во временную паку при начале игры, после чего их можно будет использовать. Иногда удобнее носить все файлы в одном exe-шнике, а не раскидывать по куче папок, что упрощает распространение игры. Например, так удобно переносить dll-ки, если ваша игра их использует. Окно редактирования включаемых файлов открывается с помощью команды Included files меню Resources.
  • Пакеты расширений - это библиотеки, которые дополняют ваш проект новыми функциями. Их можно скачать из интернета или сделать самому с помощью специального софта. Окно редактирования включаемых файлов находится на левой панели GM, двойной клик по пункту Extension Packages (иконка с зелёным крестиком). Эти файлы сперва нужно установить в GM, а уже потом появится возможность добавить их в любую вашу игру. Всё это делается в одном и том же окне.
2
Голосов: 2
GeneralElConsul - 9 years ago
Edited by
2
Голосов: 2
Когда-то сам пытался разбираться. Когда понял, что для игры надо код писать на неведомом языке программирования(будучи школьником, думал, что там будет на Паскале все писаться), испугался и бросил эту затею :)
2
Голосов: 2
Uber - 9 years ago
2
Голосов: 2
Когда понял, что для игры надо код писать на языке программирования, испугался и бросил эту затею.)
Кстати, зря, GML - необычайно прост для новичков, обычно хватает начальных знаний в C++ или дельфи (которые там где-то преподают), чтобы освоить его. Как по мне, даже знаний jass'a достаточно. Тем более, он очень щадящий и дружелюбен (кроме некоторых нюансов, например, плохочитаемого кода). Тем не менее, при этом довольно функционален.
2
Голосов: 2
GeneralElConsul - 9 years ago
Edited by
2
Голосов: 2
Кстати, зря, GML - необычайно прост для новичков,
Я после этого на Construct перешел, там система наподобие триггеров из WC3, но, оказалось, что и в случае с Game Maker и с Constuct-ом все дело было в лени и плохой выдержке.
А какой из этих движков лучше для новичков - спорный вопрос.
2
Голосов: 2
Uber - 9 years ago
2
Голосов: 2
Я после этого на Construct перешел, там система наподобие триггеров из WC3
В GM то же самое, кстати, это была первоочередная идея гамака.
но, оказалось, что и в случае с Game Maker и с Constuct-ом все дело было в лени и плохой выдержке.
Теперь понятно :/
2
Голосов: 2
Fakov - 9 years ago
2
Голосов: 2
казалось, что и в случае с Game Maker и с Constuct-ом все дело было в лени и плохой выдержке.
однозначно. Имхо - учитывая "возраст" обеих платформ, их можно считать вполне мощными инструментами для создания двадэ инди игр.
Что касается блога - неистово плюсую за проделанную работу. Вот таких вещей сайту сейчас люто не хватает.
2
Голосов: 2
Uber - 9 years ago
2
Голосов: 2
Что касается блога - неистово плюсую за проделанную работу. Вот таких вещей сайту сейчас люто не хватает.
Это не блог, а довольно старый проект...
Просто предпринимаю ещё одну попытку. А вдруг?
2
Голосов: 2
Fakov - 9 years ago
2
Голосов: 2
Uber:
Что касается блога - неистово плюсую за проделанную работу. Вот таких вещей сайту сейчас люто не хватает.
Это не блог, а довольно старый проект...
Просто предпринимаю ещё одну попытку. А вдруг?
уникальный контент тащит всегда. Собственно по хгм стал в свое время первым сайтом на деревне просто потому что все генерили уникальный контент по WE. У нас уже есть проторенная дорожка - почему бы по ней не пойти?))
To leave a comment please sign in to the site.