Как сделать комнату в game maker

Обновлено: 04.07.2024

GameMaker: Studio - это полноценный инструмент для разработки игр, в котором представлены редактор уровней, менеджер ресурсов, редактор кода и собственный скриптовый язык, известный как GameMaker Language (GML). Ранние версии GameMaker были очень простыми и многие люди помнят их, как в основном для начинающих - сделать с ними коммерческую игру было бы похоже на шутку. Теперь все изменилось, с несколькими коммерческими успехами, включая некоторые очень нашумевшие игры.

Для кого предназначен движок GameMaker: Studio?

В Master коллекции движка GM:S реализована кроссплатформенная совместимость для настольных компьютеров, HTML5 и мобильных устройств (как для Android, так и для iOS). Кроме того, имеется возможность интеграции системы управления версиями и монетизации (например, реклама и покупки в приложении). Общая стоимость master коллекции составляет около $800 долларов на момент написания этой статьи. Поэтому этот движок идеален для:

  • Любого желающего кто интересуется кроссплатформенной разработкой
  • Инди-команд разработчиков с небольшим бюджетом

Низкий порог вхождения в GM:S возможен благодаря интеграции drag-and-drop интерфейса. Таким образом, это фантастический инструмент для людей с небольшими знаниями программирования в качестве первого опыта; этот интерфейс является отличным способом изучить процесс выполнения программы и некоторую базовую логику.

Благодаря своим возможностям управления, GM:S позволяет разработчикам быстро создавать и запускать очень простые игры, что отлично подходит для игровых джемов и создания игровых прототипов.

Что в нем хорошего

GM:S очень хорош в управлении ресурсами, включением ресурсов в код, обеспечивает легкий способ изменения логики игровых объектов и событийное программирование.

Управление ресурсами

Как только разработчик создал спрайт, добавить его в GM:S можно за несколько кликов. После импорта спрайта, модификации могут быть сделаны уже в GM:S.

Creating a sprite

Создание спрайта.

Интеграция ресурсов в код

После импорта ресурса его свойства (размеры изображения, громкость звукового эффекта и т. д.) могут быть доступны из кода и могут быть назначены игровому объекту. Это делает создание игровых объектов очень простым и отлично подходит для быстрой подготовки и быстрого запуска.

Изменение логики игровых объектов и событийное программирование.

Редактор игровых объектов — это отличное средство обучения, для новичков в разработке игр, и предоставляет удобный способ изменения логики игрового объекта. Как вы можете видеть на этом скриншоте, GM:S позволяет вам писать код для конкретных событий:

Modifiying game object events
Modifiying game object events
Modifiying game object events

Модификация событий игрового объекта.

Для кого это не подойдет?

  • Людям, которые хотят создать полнофункциональную игру, нажатием нескольких кнопок. Для великих игр потребуется время.
  • Для тех, кто хочет разработать следующую грандиозную MMO. Создание сетевых игр является относительно новым направлением для GM:S, и для создания многопользовательских игр есть инструменты получше.
  • Элитные программисты которые требуют, чтобы их язык не мог управлять собственной памятью. GM:S - это не C/C++, и не является конечным языком, ориентированным на производительность. (Нельзя сказать, что производительность здесь плохая, просто C/C++ по-прежнему остается королем этой категории.)

Что в нем плохого

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

GM:S поддерживает 3D, но это не главное. Нет 3D-редактора, отсутствует программа импорта 3D моделей, а код для работы с трехмерной графикой довольно запутан. Если вас интересуют 3D-игры, я рекомендую вам использовать другой инструмент. В будущем 3D может стать более приоритетным для YoYo Games (компании, владеющей GM:S), но на данный момент это явно последнее в списке.

Где я могу получить GameMaker: Studio?

Ниже приведено сравнение различных версий GameMaker, взятых с веб-сайта YoYo Games:

feature compare
feature compare
feature compare

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

Обновление: Бесплатная версия GameMaker: Studio теперь та же, что и стандартная версия! Для получения дополнительной информации см. GameMaker: Studio будет бесплатной.

Стандартная версия отлично подходит для разработчиков одиночек, которые только планируют разработку компьютерных игр; Профессиональная версия идеально подходит для небольшой команды разработчиков планирующих переходить в конечном итоге на кроссплатформенную разработку, поскольку они могут добавлять различные модули с течением времени после получения некоторого дохода; и Master Collection отлично подойдет для небольших команд, которые являются частью созданных студий, и хотели бы использовать кроссплатформенную разработку с самого начала.

GM:S также доступен в Steam, но я бы рекомендовал не покупать его там, так как YoYo Games не знает, что вы его приобрели, и, следовательно обладателям их продукта будет больше хлопот в отделе обслуживания клиентов. Кроме того, они иногда предлагают дешевые апгрейды для тех, у кого уже есть определенная версия GM:S, и они не могут дать то же обновление пользователям купившим в Steam. Кроме того, если вы покупаете у Steam, то необходимо войти в Steam, чтобы запустить GM:S, а это может раздражать.

Обучение GameMaker: Studio

GM:S предлагает два различных способа создавать игры. Первый это так называемый интерфейс Drag and Drop (сокращённо DnD). Он довольно мощный и позволяет создавать сложную логику. Однако, он не такой мощный, как второй вариант: использование языка программирования GameMaker Language (сокращённо GML). GML - это прекрасный язык сценариев, который может делать все, что может делать DND, и многое другое.

Начало работы

После того, как вы загрузили версию движка GM:S которая соответствует вашим потребностям, вам следует ознакомиться с учебными материалами, которые поставляются вместе с GM:S. Их можно найти во вкладке Tutorials после того, как вы откроете GM:S.

В начале уроков будет показано, как использовать drag and drop интерфейс, а более поздние руководства начинают охватывать язык программирования GML. Самое приятное в предложенных уроках - это то, что они фактически добавляют окно к интерфейсу, в котором вы узнаете, как создавать каждую игру, поэтому вам не нужно обращаться к веб-странице - все доступно изложено для вас в GM:S!

Для самого продвинутого обучения можно посмотреть демки на вкладке Demos после запуска GM:S. Они не откроют окно обучения, но они предоставляют доступ ко всему используемому исходному коду, чтобы можно было просматривать его, запускать отладчик и наблюдать за тем, что происходит, так что вы получите хорошее представление как использовать их методы в своих играх.

Руководство


Руководство в программе GM:S

Если вы выполняете поиск как в прилагаемом руководстве, так и в онлайн-руководстве и не можете найти ответы, не бойтесь! На reddit существует большое сообщество /r/gamemaker и есть официальные форумы. Кроме того, имеется отличный сайт полон инди-разработчиков, некоторые из них часто используют GM:S на форумах TIG. Эти сообщества полны полезных людей, поэтому не бойтесь задавать свои вопросы!

Расширения

Если вам не хватает встроенных функций движка GameMaker, не волнуйтесь; он расширяемый! Бесплатная версия не позволяет использовать расширения, но в платной версии это возможно.

Что могут делать расширения?

Расширения добавляют новую функциональность, изначально не предусмотренную YoYo games. Вот некоторые примеры:

GiiMote - позволяет разработчику интегрировать WiiMote элементы управления в свою игру, добавляя функции, которые опрашивают состояние WiiMote (положение и нажатие кнопок).

FX Creator Extension - упрощает создание таких эффектов, как погода, лучи и брызги воды.

Взаимодействие с базами данных с помощью SQL - позволяет вашей игре подключиться к базе данных SQL, получить данные в виде строки, а затем использовать их в игре. Расширение добавляет такие функции, как TestDatabaseConnection и ExecuteSQL так, что вы можете получить данные обратно в виде двух строк кода.

Одно серьезное ограничение - некоторые расширения несовместимы с мобильными платформами.

Где найти расширения

Самые лучшие места, которые я нашел, это официальный сайт ресурсов и неофициальный сайт под названием GMToolbox.

Как их установить

  1. Необходимо загрузить расширение - это должен быть файл .gex .
  2. Щелкните правой кнопкой мыши папку Extensions в GM:S и выберите Add Existing Extension.
  3. Это должно вызвать диалоговое окно, и в правом нижнем углу вы увидите кнопку с надписью Install. Нажмите ее.
  4. Откроется другое диалоговое окно со списком установленных пакетов (возможно, пустым). Справа от этого окна есть кнопка, которая снова с надписью Install. Нажмите ее.
  5. Это открывает еще одно диалоговое окно; перейдите в папку, в которой сохранен файл .gex , щелкните его и нажмите кнопку Open.

Учебные ресурсы

Уроки инди-разработчиков

Список уроков Chevy Ray - Chevy Ray является разработчиком Flash-игрового движка FlashPunk, частый соперник на Ludum Dare и разработчик нескольких классных игр. Он написал несколько уроков по GameMaker, и это подборка тех его материалов, которые он считает лучшими. Уроки охватывают такие темы, как масштабирование вида, оптимизация скорости, параллакс-скроллинг.

Серия уроков Derek Yu's - Derek Yu является членом TIGSource и разработчиком Spelunky. Эта серия уроков для более старой версии GameMaker, но вы по-прежнему можете легко пройти ее. Это полное пошаговое руководство по созданию космической сайд-скроллер стрелялки; по мере создания вы узнаете, как работают игровые объекты, как создавать прокручивающиеся фоны, как создавать спрайт шрифты и множество других замечательных тем. Обязательно к прочтению.

Другие уроки и руководства

Официальные уроки - официальные уроки посвящены созданию нескольких игр разных стилей (некоторые из них 3D-игры, поэтому эти уроки могут быть особенно глубокими, если вы будете использовать GM:S). Кроме того, имеется урок по созданию многопользовательских игр, который, по моему мнению, является одним из лучших в Интернете по изучению создания многопользовательской игры в GM:S.

Я рекомендую их для людей, которые хотят разработать определенный тип игры и желают узнать как разрабатывать игры подобного типа, но если вы ищете урок для начинающих, я рекомендую уроки Derek Yu's.

Также ознакомьтесь с официальными и неофициальными руководствами, поскольку они дают большой справочный материал.

Становимся профессионалом

Несколько GameMaker игр стали коммерчески успешными, и есть много других великолепных GameMaker игр, которые являются прекрасными примерами того, что возможно создать используя GM:S.

Отточеные игры

Spelunky - оригинальная версия Spelunky была создана в GameMaker; более новая XBLA версия и новая ПК-версия игры, нет. Это коммерческий успех, версия, созданная в GameMaker, бесплатная.


A Nation of Wind - эта игра скрытый драгоценный камень и в нее стоит определенно поиграть.


Dustforce - вышла в Steam, это не был огромный коммерческий успех, но тем не менее, это отличная игра!


Коммерческие хиты





Заключение

GameMaker: Studio отлично подходит для новичков и профессионалов. Его великолепный код и функции управления ресурсами, в сочетании с относительно низкой ценой, делают его великолепным игровым движком для небольших команд и независимых разработчиков, обладающих приличным опытом программирования, и его доступность, и событийность, и также система drag-and-drop на основе действий, делает его отличным движком для тех, кто практически не имеет опыта программирования.

Надеюсь, вам понравилось читать этот обзор, и теперь у вас есть хорошая идея, как начать работу с GM:S. Если вы считаете, что я, что-то упустил или вам нужна дополнительная информация, не стесняйтесь, напишите мне в комментариях. Удачи вам на вашем пути разработчика игр!

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Заставим наконец мяч отскакивать от стен

Для начала, давайте разберем все возможные случаи, при столкновении мяча со стеной, на примере одного из направлений. За основу давайте возьмем полет мяча влево вверх, при dir=0.

В данном случае возможны три варианта развития событий при столкновении со стеной:

В первом случае мяч летит влево вверх и встречается со стеной сверху, при этом слева от него стены нет. В этом случае он должен сменить направление влево вниз, согласно красной стрелке, т.е. переменная dir должна смениться с 0 на 2.

Во втором случае мяч летит влево вверх и встречается со стеной слева, при этом сверху от него стены нет. В этом случае он должен сменить направление вправо вверх, согласно красной стрелке, т.е. переменная dir должна смениться с 0 на 1.

Ну и в третьем случае мяч так же летит влево вверх и встречается со стеной слева, при этом сверху от него так же находится стена, т.е. он утыкается прямо в угол. Это редкий случай, но он возможен. В этом случае он должен сменить направление на обратное, т.е. вправо вниз, согласно красной стрелке, т.е. переменная dir должна смениться с 0 на 3.

Теперь для данного направления перенесем все в код:

Думаю вы уже вполне можете читать код самостоятельно. Если направление равно 1 и на два пикселя выше мяча есть стена, то направление станет равно 2. Если направление 0 и на два пикселя левее от мяча стена, то направление 1. И если направление 0 и на два пикселя выше есть стена и на два пикселя левее есть стена, то направление 3.

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

Артём Жулеев

Вы наверное знали что collision_. даёт знать не только то что с объектом есть столкновение , но и говорит id , place_. говорит только то что с объектом есть столкновение , а вам надо что бы также говорилось id то надо писать instance_place(x,y,obj)
Может вы не знаете для чего нужен id!
ID - у объекта это свой номер создания который нельзя менять у первого объекта ID 1 + 100000 , второй 2 + 100000 и использовать можно так
collision=collision_rectangle(x,y,x,y,obj,true,true)
if collision
collison.x+=5
>

Использование Alarm(Будильников), что бы создать его нужно написать alarm[Его id]=Количество шагов через которое произойдёт действие этого будильника.
Что бы произошло действие его надо указать, указывается оно в действиях, также как и Create, Step и др. И там указываем действие.Что бы зациклить будильник можно в действии Будильника заново указать время через которое оно произойдёт.

Спрашивали про FPS и производительность.
FPS - Это максимальное количество кадров в секунду выбранное в игре /(Делённое) на производительность или правильность кода *(Умноженное) на мощность компьютера.(А вообще и так все должны знать что это.)
Что бы игра шла с хорошей производительностью к примеру есть код:
for(xx=px-i xx

Артём Жулеев

Действия Instance
instance_activate_all() //активируеть все объекты
instance_activate_object(object) //активирует объекты одного типа
instance_activate_region(100,100,740,580,0) //активирует регион сначало указываем место а потом размер
instance_change(object,1) //перевоплащение в другой объект укажите в первом в кого надо
instance_create(x,y,object) //создание объекта в определённом месте
instance_deactivate_all() //деактивирует все объекты
instance_deactivate_object(object)//деактивирует объекты одного типа
instance_deactivate_region(100,100,740,580,0,0) //деактивирует регион сначала указываем место, а потом размер
instance_destroy()//уничтожаем объект
instance_exists(object) //есть ли объект
instance_find(object,1) //указываете объект и какой по счёту из всех в комнате 0 , 1 , 2 , 3 и так далее . и он вам укажит у этого объекта ID
instance_furthest(x,y,object) //указывает ID у самого дальнего какого то объекта от какой то точки
instance_nearest(x,y,object) //указывает ID у самого ближнего какого то объекта от какой то точки
instance_number(object) //указывает кол-во объекта выбранное вами
instance_place(x,y,object) //можно ли поставить в указанное вами место объект по объекту своей маски
instance_position(x,y,object) //указывает ID объекта на какой то позиции
instance_count //указывает сколько всего в комнате объектов
instance_id //указывает у первого созданного объекта в комнате ID

Артём Жулеев

Перевод
if - если условие <>
for (_=? _=<> _+-/*?) <>
while - пока условие <>
random - случайное число
ceil - округление до максимума
floor - округление до минимума
max - выбирает максимальное значение
min - выбирает минимальное значение
mod - пока число больше определённого числа то оно будет уменьшаться
lengthdir_x - cos(pi/180*градус)*длину
lengthdir_y - sin(pi/180*градус)*длину

Используем
if
Вы не знаете как сделать что бы объект двигался за мышкой в правую сторону , а влевую нет
в голове подумаем и скажем, если объект меньше мыши по оси x то будет объект двигаться в вправо,
а влево ни чего не буду писать .
Теперь кодом,
if x PNG

Вадим Григ

Из этого я мало что понял, как же я не люблю скрипты, но иногда они необходимы хорошо что в проге есть кроме скриптов кнопки :))

Никита Порутчик

Стас Голубев

Стас Голубев

Артём Жулеев

Диана Иванова

Александр Саматов

Артём, напиши как вообще платформу с боку создать?, и что бы через стены не проходил или скинь видео очень надо буду благодарен , весь инет обыскал норм видео не смог найти .

Артём Жулеев

Андрей Ярков

Рома Вольхин

Александр Михайлов

Артём Жулеев

Game Maker Studio!

В комнате поставьте галочку на "Room is Physics World" (Включить физику в комнате) Ниже можно настроить силу и направление гравитации. По умолчанию Gravity X: 0 Y: 10,0 (чем больше значение тем сильнее гравитация).

Скаченный файл .gmz надо конвертировать в .gmx и запустить!

Крепление двух тел: physics_joint_revolute_create(. )
Есть проблема при привязки двух объектов друг к другу, опорную точку у второго объекта поставить можно так:

//Создаём первый объект
ins1=instance_create(400,200,sph)//Создаём физический объект
pf=physics_fixture_create()//Создаём физическое тело
physics_fixture_set_box_shape(pf,24,8)//Придаём физическому телу форму
physics_fixture_set_density(pf,0)//Придаём плотность(Массу)
physics_fixture_bind(pf,ins1)//Передаём физические настройки созданному объекту
physics_fixture_delete(pf)//Удаляем физические настройки

//ins1 - это объект к которому это всё крепится
//Точка один к которой всё крепится(Крепится всё к первому объекту ins1)
px1=ins1.x+24
py1=ins1.y
//Точка два - центр вращения на теле второго объекта
px2=-16
py2=0

ins2=instance_create(0,0,sph)//Создаём физический объект 2
//По некоторым причинам (x,y) прописал так:
ins2.x=px1-px2//x
ins2.y=py1-py2//y
pf=physics_fixture_create()//Создаём физическое тело
physics_fixture_set_box_shape(pf,24,8)//Придаём физическому телу форму
physics_fixture_set_density(pf,0.5)//Придаём плотность(Массу)
physics_fixture_bind(pf,ins2)//Передаём физические настройки созданному объекту
physics_fixture_delete(pf)//Удаляем физические настройки
//По некоторым причинам связка объектов была записана так:
with ins2
j=physics_joint_revolute_create(other.ins1,other.ins2,other.px1,other.py1,-360,360,1,0,0,0,0)//Связываем объекты ins1 и ins2
>

Теперь учимся менять эти две точки!:

//Точка один к которой всё крепится(Крепится всё к первому объекту ins1)
px1=ins1.x-24
py1=ins1.y
//Точка два - центр вращения на теле второго объекта
px2=16
py2=0
//Меняем физические координаты объекта ins2
ins2.phy_position_x=px1-px2//x
ins2.phy_position_y=py1-py2//y
with ins2
physics_joint_delete(j)//Разъединяем связь объектов
j=physics_joint_revolute_create(other.ins1,other.ins2,other.px1,other.py1,-360,360,1,0,0,0,0)//Связываем объекты ins1 и ins2
>

Тут мы заставим соединение joint=physics_joint_revolute_create(. ) вращаться за мышкой!

//joint - соединение(Сустав, шарнир) который мы собираемся повернуть
//point_direction(400,300,mouse_x,mouse_y) - направление в градусах куда мы хотим повернуть
spd=10//Скорость вращения

dir=radtodeg(physics_joint_get_value(joint,phy_joint_angle))//Направление соединения
a=min(spd,rotation(dir, - (point_direction(400,300,mouse_x,mouse_y))))//Тут указываем куда вращать во втором аргументе, перед ним ставим -
a=dir+sign(a)*min(spd,abs(a))//Ограничиваем скорость вращения до spd
physics_joint_set_value(joint,phy_joint_lower_angle_limit,a)
physics_joint_set_value(joint,phy_joint_upper_angle_limit,a)

var arg0,arg1,vdist;
arg0=argument0 while arg0 360
arg1=argument1 while arg1 360

Сейчас вы увидите как правильно ограничить область вращения!(Всё что вам надо это копировать)

//Всё в градусах
ds=0//Начало дуги в которой может происходить свободное вращение.
dl=270//Длинна дуги(Положительное значение)

image_angle=point_direction(x,y,mouse_x,mouse_y)//Поворачиваем в сторону мышки

//Некоторые значения: a , a2 , a3 (Их не обязательно писать тут, вы можете их написать в том месте где значения d

Читайте также: