Меня давно просили, но то времени не было, то еще что-то. Как вы наверное знаете у меня еще и дочка родилась. Но так как я сейчас в отпуске, то решил все таки уделить время и исполнить свое обещание-создать уроки по внедрению физики в Game Maker Studio. Со вступлением не буду затягивать. Сразу к делу. Все обучение я разобью на серию уроков. От простейших основ в физике до соединений и прочего. Возможно что-то подобное уже есть в сети, но либо уроки не информативны, либо они на Английском. Иначе бы меня не просили создавать этот курс обучения. Эти уроки предполагают знание Game Maker Studio или того же Game Maker 8 хотя бы на среднем уровне. Итак, урок первый. Я назову его "Основы". Для начала мы научимся создавать простейшие геометрические объекты, научимся задавать им определенные физические свойства и взамодействовать между собой. Итак, нарисуем несколько спрайтов: квадрат и круг. Я думаю это не должно вызвать у вас определенных сложностей. Я рисовать не умею. Так что изображу схематически. Два спрайта, размером 32 на 32 пикселя. Один будет круглый баскетбольный мяч. Второй будет квадратной стеной. В спрайте мячика указываем Origin, .т.е. центр спрайта по координатам X=16 и Y=16, т.е. прям по середине рисунка. Можно просто нажать кнопку "Center" и все сделается автоматически. Далее создадим два объекта, назовем их к примеру "Ball" и "Wall". Начнем с объекта стены, т.е. "Wall". После создания, редактируем этот объект. Итак, если мы хотим, чтобы объект приобрел физические свойства, то обязательно устанавливаем галочку "Uses Physics". Далее, т.к. этот объект является стеной, то он не должен падать как остальные объекты. Для этого параметр "Density", что означает "плотность", устанавливаем равным 0. Запомните, это одно из главных правил! Если без использования физики мы устанавливали галочку "Solid", чтобы объект стал стеной. То теперь это делать не нужно. Просто устанавливаем плотность равной нулю. Для чего нужны остальные параметры и что они означают я объясню чуть позже. Далее нужно создать так называемую "маску столкновения". У нас есть такое окошко с надписью "Collision Shape" и выбор трех вариантов: Circle (что означает окружность или овал), Box (что означает квадрат или прямоугольник) и Shape (многоугольник). Так как у нас стена квадратная, то выбираем Box и нажимаем на кнопку "Modify Collision Shape". В открывшемся окне, передвигая точки обводим границы объекта. Т.е. в физическом мире игры столкновения будут просчитываться именно по этим желтым линиям. Не важно какой у вас спрайт объекта и что на нем изображено, он может быть больше или меньше этого контура, но как уже написал-просчитываться столкновения будут именно по этому контуру.
С объектом стены мы закончили. Теперь делаем все то же самое для объекта мяча "Ball". Редактируем этот объект. Включаем галочку "Uses Physics", чтобы объект приобрел физические свойства. Т.к. мяч у нас будет двигаться, т.е. падать отскакивать и т.д., то плотность "Density" не нужно менять на 0. Оставим ее пока равной 0.5. Далее выбираем маску столкновения по аналогии со стеной. Т.к. у нас мяч круглый, то выбираем "Circle" и в редакторе маски обводим контур.
Вот и все. Два объекта создано. Осталось только создать комнату и расставить объекты. И тут есть еще одна особенность. Объектам мы задали физические свойства. Теперь нужно включить физику в самом мире или проще говоря комнате. Для этого выбираем вкладку "physics" и устанавливаем галочку "Room is Physics World". Далее устанавливаем параметры физического мира. Вдоваться в подробности что это пока не буду. Просто выставите как на скриншоте. Можете поэксперементировать с этими числами и тогда объекты будут двигаться быстрее/плавнее или можно задать силу гравитации не вниз а в сторону, к примеру. Но как я уже сказал, пока эти значения не трогаем.Далее мы расставляем все объекты в комнате и запускаем "игру". И... И тут мы видим, что мячик пролетает сквозь стену. Мы забыли указать, чтобы мяч сталкивался со стеной. Есть два способа. О втором поговорим чуть ниже. Сначала первый способ. Для этого опять заходим в объект мяча. Нажимаем кнопку "Add Event", т.е. добавить событие. В открывшемся окне выбираем "Collision", что значит столкновение, и выбираем объект "Wall". Т.е. мы указали, чтобы объект мяча сталкивался с объектом стены. И тут еще одна особенность GMS! Для того, чтобы он действительно сталкивались выбираем вкладку "Control" и переносим значок восклицательного знака в желтом треугольнике (т.е. комментарий) в поле "Actions". И в открывшемся окне пишем все, что угодно. Я напишу "Collision with Wall". По сути же совершенно не важно, что именно будет написанно в коментарии, но важно, чтобы он был, иначе столкновения мяча со стеной не будет. Пробуем запустить еще раз. И вот мы видим, что все работает прекрасно. Но если к примеру вы хотите расставить несколько мячей в комнате, то заметите, что они сталкиваются только со стеной, но между собой никак не взаимодействуют. Т.е. мы хотим, чтобы мяч сталкивался с мячом. Тут работаем по аналогии. Заходим в объект мяча. Нажимаем кнопку "Add Event", выбираем "Collision", и выбираем объект "Ball", оставляем какой-нибудь комментарий, к примеру "Collision with Ball". Запускаем. Как видите все работает. Но вы конечно же заметили, что мячи ведут себя как камни. Они не отскакивают от пола и стен. Вот тут и пришло время поговорить о физических свойствах объектов и их параметрах. Итак их у нас 6: 1) Density (что означает плотность). Чем выше это значение, тем "тяжелее" будет объект. 2) Restitution (можно перевести как восстановление). Т.е. как быстро будет ваш объект возвращаться в исходное состояние, а именно состояние покоя. Чем выше этот параметр, тем дольше объект будет успокаиваться. Это именно тот параметр, что нам нужен чтобы заставить мяч отскакивать от пола. Установите его равным хотя бы 0.8 и увидите, что получилось. 3) Collision Group (или группа столкновений). Если вы хотите, чтобы объекты сталкивались между собой, то достаточно включить их в отдельную группу. К примеру, можно у объекта стены и мяча просто указать группу один, т.е. они будут находиться в одинаковой группе, тогда все события столкновений, что мы прописывали можно удалить из объектов. Они и так будут сталкиваться. Вот вам второй, более простой способ для указания столкновений для объектов. Вдоваться в подробности не буду. Но порой лучше использовать первый способ, описанный выше. В ходе практики сами поймете почему. Иногда нам просто нужно, чтобы первый объект сталкивался только со вторым, но не с третьим. А второй с третьим и т.д. Сложно понять по началу. Но в ходе создания игры, как я уже сказал, вы все поймете. 4) Linear Damping (Линейное затухание). Ну тут подробно останавливаться не буду. Скажу лишь, что чем выше число, тем быстрее объект будет "затухать", а точнее его скорость, можно и так сказать, чтобы упростить понимание. Просто поэксперементируйте и вы все поймете сами. 5) Angular Damping (Угловое затухание). То же самое, что и выше, только связанное с вращением. Не буду останавливаться. 6) Ну и последнее, Friction (что значит трение).Ну тут все просто. Это сила трения. Учите физику, господа. Скажу лишь, что с помощью этого параметра можно создавать такие поверхности, как лед к примеру. На этом, я думаю, первый урок следует окончить. Я рассказал вам об основах физики в Game Maker Studio. Надеюсь этот урок поможет вам хоть немного понять и освоиться в этом на первый взгляд не простом деле. Во втором уроке я возможно расскажу вам о силах в физическом мире. В третьем о соединениях. Если что-то непонятно или вы бы хотели в уроках услышать что-то особенное, то оставляйте комментарии. Постараюсь включить это в уроки. Спасибо за внимание.
Категория: Создание игр | Добавил: Raven84 (03 Января 2015)
| Автор: Лучин Владимир Николаевич
Также если вы считаете, что данный материал мог быть интересен и полезен кому-то из ваших друзей, то вы бы могли посоветовать его, отправив сообщение на e-mail друга:
Игровые объявления и предложения:
Если вас заинтересовал материал «Game Maker Studio. Физика. Урок 1: Основы.», и вы бы хотели прочесть что-то на эту же тему, то вы можете воспользоваться списком схожих материалов ниже. Данный список сформирован автоматически по тематическим меткам раздела.
Предлагаются такие схожие материалы:
Если вы ведёте свой блог, микроблог, либо участвуете в какой-то популярной социальной сети, то вы можете быстро поделиться данной заметкой со своими друзьями и посетителями.
В GM 8.0 их и нет. Физика доступна только в Game Maker Studio. А для GM8 можно использовать стороннюю библиотеку Extreme Physics. Но с ней сложнее работать новичку.
Молодец! Рад за тебя! Я создавал эту серию уроков с целью дать толчок к самостоятельному изучению остального. Но возможно позже напишу еще уроки по этой теме.
Вообще хотелось бы в уроках охватить очень многое, но опять же очень мало времени. А на то чтобы написать материал, скомпоновать его и сделать понятным многим очень много сил и времени уходит. По крайней мере у меня.
Короче я считаю, что не зная основ браться за что-то большое человеку смысла нет. Я хочу, чтобы пользователи не бездумно копировали код, а научились,вникнув в саму суть процесса ,писать код сами. Вот моя цель. После первого основного цикла уроков посмотрю и может быть что-то и посложнее сделаю. Сложность еще возникает с тем, что в последней версии GMS добавлены новые физические функции, которых нет в более ранних версиях. И тут стою перед выбором: писать уроки по новой или по более ранней версии (которая еще не у всех есть). Скорее всего по старой опишу все.
Тем более справка GMS еще до сих пор насколько я знаю не переведена на русский и у многих возникают проблемы с этим. Мне проще, я английский знаю на среднем уровне и могу разобраться.
Ну тут пока особо сказать нечего, слишком просто все и подобное изложено в некоторых уроках, как текстовых, так и на видео. Может, конечно, кому-то и будет полезно. Я понимаю, что если серия уроков будет, то нужно начинать с основ, так что никаких претензий нет. Разве что оформлению можно чуть больше внимания уделить. Изложение неплохое, но, опять же, из-за простоты самой задачи сложно что-либо говорить, ибо тут, по больше части, достаточно просто на картинки посмотреть, чтобы все понять. Но вот интересно, будет ли что-нибудь действительно сложное и необычное? Или только всякими там соединениями в пару функций ограничишься, так сказать, расскажешь основы основ? Я просто думал тоже уроки написать на эту тему, только без основ, а сразу замахнувшись на что-то масштабное.
Да, я даже в начале указал, что потребуется знание GM на среднем уровне, но все же урок построил так, что даже совсем новички смогут научиться что-то делать. Это во-первых. Во-вторых, мне часто задавали вопросы типа "А как сделать веревку?","А как сделать машину?" и т.д. и т.п. В уроках я постараюсь осветить эти темы, так как покапавшись в интернете я и вправду не нашел внятных уроков на эти темы на русском. Ну и в конце концов, что вы понимаете под выражением "что-нибудь действительно сложное и масштабное"? Если кому-то интересно что-то особенное, то он может оставить здесь в коментариях свои пожелания как я уже сказал и по мере возможностей я постараюсь сделать урок на эту тему. У меня же не стоит целью выполнить за кого-то какую-то сложную задачу. Скорее я хочу научить пользователей нескольким основным функциям, зная которые и включив мозг они уже смогут создать как раз нечто более сложное.
Добавлять комментарии могут только зарегистрированные пользователи. [ Регистрация | Вход ]