Как сделать марио в game maker

Обновлено: 30.06.2024

Рекомендации, которые покажут, как надо или не надо делать.

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

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

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

Предположим, вам нужно сделать пару врагов: первый с 4 HP и второй с 10 HP. Как новичок, вы подумаете, что нужно создать ещё один объект и изменять HP внутри него. Но этот вопрос можно решить проще.

Когда вы размещаете экземпляр внутри комнаты через редактор комнат, вы можете открыть окно «Код создания» (в GMS2 нужно кликнуть дважды) и писать код в нём. Таким образом вы можете задавать HP экземпляров внутри их кода создания.

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

Функция place_meeting() может использоваться для проверки столкновений между объектами. Лучше использовать эту функцию в условии, чем использовать событие столкновения, так как вы сможете больше контролировать работу столкновений.

Первый и второй аргументы — это X и Y координаты, в которых будет проверятся столкновение. Третий аргумент — это объект, с которым будет проверятся столкновение.

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

Многие новички используют условия для установки переменных ввода. Например

Но есть более простой способ. Вот этот.

Вы знаете что keyboard_check() возвращает true если нажата определённая клавиша, или возвращает false если она не нажата. Но в GameMaker'е true становится — 1, а false — 0, это просто числа. Поэтому их можно использовать в таком уравнении.

Если нажата правая клавиша, то hsp будет равен 1.

Если нажата левая клавиша, то hsp будет равен -1.

И если ни одна клавиша не нажата, то hsp будет равен 0.

Тоже самое можно применить к вертикальному положению.

Для отрисовки HUD некоторые люди используют объекты или отрисовывают их через событие Draw — добавляют их относительные позиции в координаты камеры/вьюпорта.

Внутри события Draw GUI вам не требуется добавлять позиции камеры для того, чтобы HUD следовал за ней. Это событие использует координаты окна игры, вместо координат комнаты. Поэтому, если вы рисуете что-то в (0, 0), то это будет рисоваться в верхнем левом углу игрового окна, а не комнаты. Так что, всё что вы рисуете там, остаётся там: на его позицию не влияет камера в игре. Это как ещё один слой над вашей игрой.

В этом совете я обращусь к тому, что создает путаницу среди начинающих разработчиков.

Я говорю о функциях _create. Это функции, которые для создания чего-либо (поверхности, буфферов, структур данных и так далее) и сохраняет результат в переменную.

Давайте возьмём список структуры данных, как пример. Эта функция создаёт список и хранит его в переменной, верно?

Если я создам список в локальной переменной, он исчезнет в конце события, потому что переменная является локальной. Ведь так?

На самом деле, это работает не так. Всякий раз, когда вы создаёте список, он создаёт его внутри памяти. Именно там он и существует. Функция просто возвращает указатель, на список внутри памяти. Таким образом, переменная, которую вы используете как «список», представляет собой просто указатель, который позволяет вам получить доступ к фактическому списку в памяти.

Даже если переменная является локальной — список не существует. Помните, что переменная — это просто указатель. Чтобы уничтожить список, вам надо использовать.

Кроме того, когда вы делаете так.

Вы не создаете другой список, называемый «list_2», который совпадает с « list_1». Вы просто копируете значение указателя в эту переменную, поэтому обе переменные указывают на тот же список в памяти.

Это работает так же по отношению к другим вещам, таким как поверхности, системы частиц и буферы. Переменная — это только указатель на то, что существует внутри памяти, пока оно не будет уничтожено.

Когда вы создаете поверхность, она должна быть пустой, ведь так?

Ну, это не всегда так. Смотрите: когда вы уничтожаете поверхность, она освобождает память, но не очищает её. Если вы создаёте поверхность и она создаётся в том же блоке памяти, где когда-то существовала поверхность, которая была уничтожена, то содержимое уничтоженной поверхности может перенестись в новую.

Поэтому, когда вы создаете поверхность, убедитесь, что вы ее очистили.

В раздел Gamedev попадают не только редакционные материалы, но и читательские тексты с пометкой «Блог». Вы можете нажать кнопку «Написать» и рассказать о своём опыте разработки. Подробнее о читательском контенте в разделе вы можете почитать тут.

Как настроить дозагрузку
контента для тяжёлой игры

При этом с объектами и инстансами можно работать совершенно одинаково, так что первое время можно обращаться к инстансу по имени породившего его объекта, и игра даже будет работать.
А когда инстансов станет несколько - начнутся проблемы. Потому что GMS в такой ситуации под капотом перебирает все инстансы, и выполняет с ними указанную операцию.

Как делать уровни в «Марио Мейкере»

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

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

Все игровые объекты размещаются блоками. Чтобы поставить на поле препятствия, бонусы, врагов и другие элементы игры, нужно:

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

Не забудьте про кирпичи или другую основу для прохождения, иначе Марио упадёт в бездну не успев начать играть! Сохраните свою карту и если хотите начать прохождение зайдите с главного меню, нажатием на кнопку «Сохранённые уровни».

Персонажи Марио

У главного героя есть 4 степени трансформации:

  • классический Марио — самая слабая форма персонажа, может легко потерять жизнь;
  • Супер Марио в два раза больше классического, может противостоять врагу не теряя жизни, но касаясь противника превращается в малую форму;
  • Огненный или Ледяной Марио играют с суперсилами огня и льда;
  • непобедимый персонаж получает временные чары неуязвимости после касания супер звезды.

Срывая огненный или ледяной цветок Марио меняет цвет и может атаковать врагов шарами. Огненные шары подпрыгивают и могут победить почти всех врагов на расстоянии. Ледяные — катятся и замораживают противника.

Теперь вы знаете, как играть в Марио. Остался последний секрет: в конце каждого уровня расположен флагшток, с него персонаж снимает флаг и завершает уровень, радостно махая. Учтите, чем выше место попадания на флагшток, тем больше баллов получит ваш герой. Приятной игры!

Как написать игру-платформер в Game Maker Studio — ЧАСТЬ 1

Я покажу, как реализовать передвижение, коллизию, прыжки, гравитацию, ускоряющие платформы, платформы для прыжков, смерть от шипов и падения за карту, переход на следующий уровень и порталы.

Перед началом желательно иметь хоть какие-нибудь навыки работы с Game Maker Studio. Рекомендую ознакомиться с интерфейсом программы.

Создадим объект oPlayer (в дальнейшем все названия ресурсов будут начинаться с соответствующей приставки, чтобы понимать, что это за ресурсы. Для объекта (object) — «o», для комнаты (room) — «r» и т. д.). Также понадобится нарисовать спрайт или загрузить уже готовый, и привязать его к объекту. В моем случае это простой белый квадрат 48x48.

В событии Create объявим следующие переменные:

xDir - направление движения игрока по горизонтали. Переменная будет равна -1, если игрок идет налево, 1 — если направо, и 0 — если игрок стоит на месте.

stepLength - длина шага игрока в пикселях. Пускай переменная будет равна 10.

dx - сдвиг по горизонтали. Каждое обновление комнаты (по умолчанию — 60 обновлений в секунду) игрок будет сдвигаться на dx пикселей. dx будет вычисляться перемножением xDir и stepLength.

Переменные можно объявить другим способом: в специальном разделе Variable Definitions.

В событии Step напишем следующее:

xDir = -keyboard_check(ord("A")) + keyboard_check(ord("D")); dx = xDir * stepLength; x += dx;

Переменная x относится к тем переменным, которые есть в каждом созданном вами объекте. Они определяются автоматически, без вашего участия. Список всех таких переменных.

Первая строка вычисляет направление движения. Функция keyboard_check(key) принимает в качестве аргумента клавишу и возвращает true, если она нажата. Функция ord(string) принимает в качестве аргумента строку и преобразует ее в необходимый тип данных для аргумента функции keyboard_check(key). Таким образом, при удержании клавиши A xDir становится равным -1; при удержании клавиши D xDir становится равным 1.

Вторая строка вычисляет dx.

Третья строка увеличивает x на dx пикселей, то есть двигает игрока.

Создаем комнату и добавляем на слой Instances экземпляр объекта игрока.

Запускаем и убеждаемся, что все работает как надо.

Вместо того, чтобы обрабатывать каждый объект, в который можно врезаться и на котором можно стоять, создадим абстрактный объект oSolid («твердый» объект), от которого будем наследовать другие объекты, которые мы хотим наделить коллизией.

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

xDir = -keyboard_check(ord("A")) + keyboard_check(ord("D")); dx = xDir * stepLength; if (!(place_meeting(x + dx, y, oSolid)) //эта строчка новая x += dx;

place_meeting(x, y, obj) нужна для проверки пересечения прямоугольников двух объектов. Она принимает три аргумента: x - позиция первого объекта по оси x, y - позиция первого объекта по оси y, и obj - имя второго объекта или id его экземпляра. Функция возвращает true, если объекты пересекаются и false - если нет. Важно то, что проверка осуществляется не в одной лишь точке (x; y), а сразу во всех точках прямоугольника вызывающего объекта. Для проверки коллизии в одной точке имеется функция position_meeting(x, y, obj), но она нам не понадобится. Используя place_meeting(x + dx, y, oSolid), мы проверяем пересечение игрока с твердым объектом, как если бы игрок был сдвинут на dx пикселей. И только убедившись, что пересечения нет, меняем координату игрока.

Теперь нужно создать объект oWall, установить ему родителя oSolid и привязать к нему какой-нибудь спрайт. В моем случае это черный квадрат 64x64. Позже в редакторе комнаты экземпляры этого объекта можно будет растянуть.

Создадим небольшую комнату и расставим там несколько oWall, чтобы проверить работоспособность.

Как играть в бродилку Марио

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

  • дополнительные монеты;
  • супергрибы, превращающие обычного Марио в Супер Марио;
  • огненные цветы дают силу огня, повышая скорость бега и высоту прыжка;
  • ледяные цветы после срывания позволяют замораживать врагов.

Марио Мейкер

Игра «Марио Мейкер»

Перед вами уникальный выпуск игры «Марио»: бродилки на одного с возможностью продолжать приключения на новых картах. Начните с выбора одного из двух режимов: «Новая игра» или «Редактор».

Начнём с главной особенности игры «Марио Мейкер»: возможности делать свои собственные карты уровней, используя экран редактора как холст.

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