Добрый день, уважаемые читатели! Делал большой перерыв с написанием статей на канале. Появилось время, решил вернуться.
В этой серии статей решил немного познакомить вас с физикой в движке Game Maker Studio и показать на сколько просто можно создать простые игры на нем.
Дело в том, что в сам движок для создания игр Game Maker Studio встроен физический движок BOX2D. Благодаря ему вам не нужно париться вообще ни о чем, он сам просчитает все столкновения, гравитацию, повороты и прочее.
Давайте создадим новый проект (как, я уже описывал в прошлых уроках). В самом проекте создадим 4 спрайта с "якорем" в центре. Пусть это будут квадрат, круг, планка и треугольник:
Далее давайте создадим 4 объекта под данные спрайты. Начнем с квадрата. Создаем объект, даем ему имя "obj_box", назначаем спрайт квадрата и ОБЯЗАТЕЛЬНО ставим галочку "Uses Physics", т.е. использовать физику. Именно эта галочка дает установку данному объекту подчинятся всем законам встроенного физического движка BOX2D:
Далее, если вы помните, то коллизии (столкновения) объектов в Game Maker Studio обрабатываются по маскам объекта. Но при включенной физике обработка столкновений будет происходить чуть иначе - по назначенному данному объекту fixture - условно говоря это та же маска, но в физическом мире. Чтобы назначить ее на объект, нажимаем на кнопку Physics (физика) и далее на Modify Collision Shape (изменить фигуру коллизии). Там вы увидите, что Game Maker уже самостоятельно назначил фигуру (ровно очертил квадрат), но вы можете внести изменения самостоятельно (изменить форму фигуры, размер, кол-во углов и т.д.
Сами настройки физики во вкладке Physics, пока не меняем.
Ах, да, забыл сказать, что помимо динамических фигур, т.е. тех, что будут подвержены гравитации, и различным силам, нам понадобится еще и статичный объект, т.е. стена/пол, на который данные фигуры будут падать. По этому самостоятельно создайте еще один квадратный объект. Назначьте ему заранее заготовленный спрайт стены, включите физику, настройте маску столкновения и смените всего одну характеристику Density (плотность) сделав её равной 0:
Физические объекты с нулевой плотностью будут стоять как вкопанные на сцене и ни гравитация, ни прочие силы на них не будут действовать.
Все, что нам осталось сделать, для того, чтобы встроенный физический движок BOX2D заработал, так это создать комнату и так же ОБЯЗАТЕЛЬНО включить в ней физику - галочка "Enable Physics". Ну я дополнительно еще чуть поменял характеристику "Pixels to meters", чтобы фигурки падали быстрее.
Все! Расставляем объекты стены и фигурок квадратов по сцене и запускаем проект. Вы увидите как они будут падать, сталкиваясь друг с другом и стеной, при этом по всем законам физики вращаясь и т.д.
Давайте теперь проделаем все то же самое с остальными фигурами: кругом, планкой и треугольником. Создадим для них объекты, включим в них физику, назначим им маску столкновения (Fixture) и расставим по комнате.
Когда вы дойдете до создания маски для окружности, то движок вам автоматически выдаст квадратную маску:
Сменить Box на Circle и задайте радиус при необходимости:
Объект готов и вы можете его так же добавить на сцену и увидеть, что он падает и катается, как и положено окружности.
Давайте немного поиграемся и сменим одну из физических настроек круглого объекта, а именно Restitution (возвращение к исходному состоянию) и установим ее значение на 0.6:
Запустите свой проект и посмотрите, что изменилось. Шарик начал вести себя как баскетбольный мяч, т.е. стал более прыгучим. Т.е. если значение Density отвечает за плотность объекта, т.е. по сути на сколько он тяжелый (т.е. чем выше значение, тем объект тяжелее и его сложнее сдвинуть более легкими объектами), то значение Restitution отвечает за то, как быстро объект вернется в положение покоя, т.е. чем выше это значение, тем объект будет дольше возвращаться в состояние покоя.
Давайте введем в игру оставшиеся фигуры. Создаем объект планки. Там ничего сложного, все настройки те же:
Теперь перейдем к созданию объекта треугольника. Дойдя до создания маски столкновения вы поймете, что два ранее применяемых варианта (Box и Circle) нам уже не подходят и нужно использовать третий вариант - Convex Shape:
Выбрав данный вариант, расставьте 3 точки по углам треугольника как на скриншоте ниже:
Что важно помнить, создавая маску столкновения для фигур произвольной формы? То, что фигура должна быть Convex (т.е. выпуклая), но не Concave (т.е. без вогнутостей). В движке BOX2D не допускаются такие формы фигур:
Это ограничение конечно можно избежать, просто склеив фигуру неправильной формы с вогнутостями, несколькими выпуклыми фигурами. Т.е. в движке на один объект можно назначить несколько Fixture, склеив их одна с другой. Но об этом в данном уроке пока рассказывать не буду, это отдельная тема для разговора.
Все! Расставляем несколько фигур по сцене, запускаем и смотрим, как они красиво падают, вращаются, отскакивают, катятся и т.д.
В движении это выглядит так:
Спасибо, что дочитали статью до конца. Ставьте лайки, делитесь ей с другими, задавайте вопросы, оставляйте комментарии, пожелания и т.д. В скором времени я напишу вторую часть и мы попробуем на основе уже этого сделать пусть простенькую, но игру со своими целями и условиями победы.