Как сделать платформер в gdelevop

Добавил пользователь Владимир З.
Обновлено: 06.10.2024

This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters

endgage12 commented Jul 7, 2020

Игра представляет собой платформер 2D. Цель игры: дойти до конца уровня, попутно преодолевая препятствия.
Управление героем реализовано засчет SFML опций состояния клавиатуры (Keyboard::isKeyPressed). Управление установлено на стрелки.
Столкновение с противником
Передается положение объекта врага и проверяется на текущую высоту с героем (y), если высота героя (его координаты по y) больше врага, то герой умирает. Так происходит оттого, что высота карты идёт с левого верхнего края, то есть, чем больше высота по значению, тем мы на самом деле ниже. В другом случае инкрементируем значение очков героя и передаём управление в следующую функцию.
Попадание в ловушку (поле, встав на которое герой умирает)
Если координаты героя на элементе массива, как ловушка (w), то герой умирает.

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

Для графической составляющей игры используется библиотека SFML. С помощью неё используется объект класса RenderWindow window, который является главным окном игры. Для изображений используется класс Image, Texture, Sprite. Для работы со временем – Clock.


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

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

1. Определитесь с визуальной темой

Выберите визуальную тему для уровня. Вы можете выбрать устоявшуюся, широко распространенную среди игр, тему, такую как 'Лес', 'Лед', 'Лава' или 'Замок'. Или сотворите что-то более творческое, например 'Завод по созданию клонов в стиле стимпанк', 'Страшный сон психолога' или 'Кафе-мороженое Купидона'. Спросите мнение о визуальной теме всех в вашей команде.

2. Составьте список

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

  • Особые предметы обычно встречаются на уровне однажды.
  • Обычные предметы встречаются на уровне более одного раза.

Запишите сколько раз встречается обычный предмет (например, на уровне нужно собрать 50 монет или игрок должен победить 10 фехтовальщиков). Эти цифры приблизительны и они помогут вам определить сложность уровня. Например, на первом уровне могут быть два опасных тролля, а на втором уровне их будет четыре. Позвольте всем членам команды внести свой вклад в список.

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

Особые предметы:

  1. Первая встреча с врагом.
  2. Обнаружение первого бонуса.
  3. Изучение двойного прыжка.
  4. Изучение разрушаемой окружающей среды.
  5. Нахождение первой запертой двери.
  6. Нахождения ключа для запертой двери.
  7. Использование рычага, чтобы активировать движущуюся платформу.

Обычные предметы:

  1. Враги пехотинцы (х30)
  2. Башенные артиллерийские установки (х10)
  3. Бонусы (х30)
  4. Движущиеся платформы (х3)
  5. Ключи (х2)

3. Сделайте приблизительную схему

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

Вы можете сделать несколько схем прежде, чем остановитесь на одной. Обычно, причина изменения схемы одна из:

  • Некоторые области слишком большие/маленькие
  • Некоторые линии слишком прямые и длинные (т.е. скучные)
  • Полная схема слишком проста/сложна
  • Полная схема выглядит неинтересно.


Приблизительная схема целого уровня

4. Сделайте приблизительные наброски особых предметов

Игроки должны найти каждый предмет из списка, который вы создали в пункте 2, где-то на уровне. Также они могут найти несколько предметов в одной области. Сделайте приблизительные наброски каждой области, в которых игрок найдет особые предметы из списка.

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

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

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

Примеры приблизительных эскизов


Особый предмет 1: Первая встреча с врагом.


Особый предмет 2: Обнаружение первого бонуса.


Особый предмет 3: Изучение двойного прыжка.


Особый предмет 4: Изучение разрушаемой окружающей среды.


Особый предмет 5: Нахождение первой запертой двери.


Особый предмет 6: Нахождения ключа для запертой двери.


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

5. Сделайте детальную схему

Нарисуйте подробную схему уровня. Используйте приблизительную схему (из пункта 3) как направление. Подробная схема должна включать в себя все особые предметы (скопируйте наброски из предыдущего пункта) и обычные предметы. После копирования набросков вам, возможно, понадобится их слегка изменить (например, изменить размер, отразить по горизонтали).

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

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


Пример детальной схемы.


Местоположение определенных пунктов на детальной схеме.

6. Постройте первоначальный план

Используйте редактор уровней, чтобы построить первоначальный план, используя детальную схему (из предыдущего шага) как чертеж. При постройке, возможно, понадобится изменить размер некоторых областей. Это происходит потому, что набросок не вычерчен в масштабе. Также используйте редактор, чтобы добавить все оставшиеся обычные предметы на уровень. Например, в вашем списке 20 врагов, но на детальном плане их всего 15. Добавьте остальные 5 на данном этапе.

Постройте первоначальный план прежде, чем будете добавлять все визуальные детали. Другими словами, используйте ограниченное количество графики в первоначальном плане, чтобы иметь возможность легко что-то изменить. Например, если у вас есть пять изображений с травой, используйте только одно для первоначального плана. Вы сможете добавить оставшиеся четыре в пункте 8, тем самым украсив уровень.

7. Сыграйте в уровень

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

Изменения в плане могут заключаться в следующем:

  1. Переместить, добавить или удалить платформы, чтобы облегчить/усложнить прыжки.
  2. Переместить, добавить или удалить бонусы, чтобы уравновесить доступное количество.
  3. Переместить, добавить или удалить врагов, чтобы облегчить/усложнить уровень.

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

8. Украсьте уровень

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

Всем привет! И снова я решил опубликовать очередной урок по GameMaker Studio и для тех кто не любит много букАв, предлагаю к просмотру видео!

Ну а для тех кто все же любит чтение приступим!

Как всегда начнем со спрайтов

Выбираем Create Sprite, в появившемся окне в строке Name: пишем spr_player и это будет название нашего спрайта.Далее нажимаем Edit Sprite. Тыкаем на New , с создаем 32х32. После выбираем заливку и цвет, любой по желанию, я же выбрал синий. Далее проделываем те же шаги по созданию спрайта стен spr_wall у меня она получилась вот такой.
Что же, переходим к обьектам.
Первый наш обьект это obj_player главное не забудьте указать ему спрайт игрока =).
После займемся написанием кода:
Первым делом создаем евент Create и прописываем туда
///Старт
grav = 1;
spd = 4;
hspd = 0;
jspd = 12;
vspd = 0;
Далее создаем евент Step и прописываем туда

///Движуха
var right = keyboard_check(ord('D'));
var left = keyboard_check(ord('A'));
var jump = keyboard_check(vk_space);

if (place_meeting(x, y+1, obj_wall)) vspd = 0;


if (vspd
После создаем обьект стены obj_wall и переходим к созданию комнаты(room)
У меня получилась вот такая как создавать комнаты можете увидеть в видео, или же посмотреть мои предыдущие видеоуроки.


Последний штрих это запуск нашего платформера и как мы видим все работает отлично. Поздравляю вы создали свой первый платформер! =))).

Все интересующие вас вопросы можете задавать в комментариях, а если вам понравилось, то подпишись на канал ютуба и не пропускай следующих уроков, и иных видео! =) Всем бобра!


Если на вашем компьютере нет программы , скачайте её с официального сайта : . Обязательно скачайте программу GD с этой страницы, чтобы получить . Установите или распакуйте и запустите программу. Начальная страница выглядит так:

 При желании, вы можете прочесть эту страницу, что

При желании, вы можете прочесть эту страницу, чтобы получить быстрый обзор интерфейса программы GDevelop. Заметьте, что внешний вид GDevelop может быть изменен: зайдите в Файл > Параметры, затем выберите Оформление и желаемый результат.

Видео

Проверка столкновений с помощью функции hitTestPoint()

Запустите приложение и проверьте как оно работает. Обратите внимание, что персонаж падает, но не останавливается на платформе. Для этого нужно доработать код, добавив проверку столкновений с платформой. В AS3 есть два метода проверки столкновений, первый это hitTestObject(), который проверяет, столкнулись или пересеклись два объекта, второй это hitTestPoint(), который проверяет, столкнулась или пересеклась точка и объект. Вы, наверное, помните, что когда мы конвертировали объекты в символы, то для персонажа указали точку регистрации внизу, а для платформы сверху слева. Так вот теперь будем использовать hitTestPoint() и проверять на столкновение точку персонажа и объект платформу.

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

Проверьте, как работает пример, запустите приложение, теперь персонаж приземляется на платформу.

Список (массив) платформ

Так как в игре будет много платформ, то будет не просто проверять столкновение с каждой. Чтобы решить эту проблему давайте создадим список (массив) платформ, в который будут добавляться платформы. Используя оператор for будем проходить по всему списку и проверять каждую платформу, а также выполнять другие действия с ней, если это необходимо.

Чтобы каждая платформа добавлялась в список, добавьте следующий код в кадр символа Platform.

Давайте разместим еще платформы и проверим, как работает приложение.

Звуки и музыка

Давайте добавим в игру музыку и звуки. Для начала скачайте архив sounds.zip, в котором содержатся все музыкальные файлы для данной игры. Затем в Layout Editor (Редактор уровня) добавьте новый объект, который называется Xaudio2 — он появится в списке объектов сцены. Смотрите рис. 111.


Порталы

Создадим объект oPortal и в событии Create объявим переменную pair (пара). Эта переменная будет хранить id другого портала, к которому игрок будет телепортироваться. Таким образом вы сможете получить доступ ко второму порталу через первый.

От oPortal я унаследовал два объекта: oPortalBlue и oPortalPink, у каждого свой соответствующий названию спрайт.

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

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

При двойном нажатии на один из экземпляров высветится меню, где можно настроить этот конкретный экземпляр: изменить значения переменных, идентификатор или код создания. Изменение параметров выделенного экземпляра не затронет остальные экземпляры этого же объекта в комнате. В разделе Creation Code можно указать, какой портал будет являться парой для выделенного. Для этого пишем pair = *идентификатор другого экземпляра портала*;.

В моем случае id другого портала — inst_6CB6ED9F, у вас это название будет другим. По желанию это наименование можно изменить на более понятное, например, instPortalBlue1.

То же самое следует проделать с остальными тремя порталами.

Теперь в объекте oPlayer добавим событие пересечения с oPortal и добавим этот код:

other в любом событии пересечения двух объектов — это ссылка на экземпляр объекта, с которым пересекся экземпляр, вызвавший это событие.

Запускаем и смотрим результат.

Предварительный просмотр

Теперь можно проверить как работают выбранные поведения.

На ленте Scene выберите Preview :

 Ваш любимый браузер будет открыт, и игра будет за

Ваш любимый браузер будет открыт, и игра будет запущена Вы можете перемещать персонажа с помощью клавиш со стрелками и использовать кнопку Shift для прыжка! На данный момент объект не имеет анимации, мы добавим ее позже.

Если объект не движется, убедитесь, что вы добавили правильное поведения. Убедитесь, что вы добавили поведение Platform объекту Grass , o в противном случае игрок будет вылетать за пределы экрана.

Добавление анимации для главного героя

Пришло время добавить в игру главного героя. Скачайте архив с анимацией персонажа по этой ссылке — character.zip. Распаковав архив, внутри вы обнаружите 4 папки с анимацией.

Для начала загрузим анимацию стойки. Для этого вернитесь к слою scenery (выделив его) и создайте в Layout Editor (Редактор Уровня) новый объект спрайт. В Picture Editor (Редактор изображений) загрузите кадр анимации с именем frame01 из папки standing. Переименуйте спрайт в character и переместите его поближе к спрайту basis. Далее переходим на панель в правой части экрана и внизу выбираем вкладку Animator (Анимация). На панели отобразится список анимаций. Смотрите рис. 25.


Курсы

Если нужно подтянуть навыки программирования, то на арену выходит старый и проверенный игрок — Code School. Всё происходит прямо в интерфейсе сайта, который выглядит свежо и удобно. И не чувствуешь на затылке укоризненный взгляд Лобачевского со старого портрета над доской с графиком дежурств. Точно стоит обратить внимание хотя бы на бесплатные курсы, чтобы понять, насколько удобен такой формат обучения.

Есть официальные курсы от Unity, не надо далеко ходить. Кажется, что они и дальше готовы инвестировать в это направление (а после курсов можно еще получить сертификат).

У GeekBrains есть два отличных курса, разбитых по уровням сложности. Раз уж мы говорим о 2D-играх, нас интересует первый. Оба курса требуют определенной алгоритмической подготовки, программированию там не учат, только разработке на Unity.

Вы научитесь делать игры в 2D буквально с нуля: на первом уроке установите движок, а на восьмом уже запустите проект на Android. Вы даже можете заметить меня в списке преподавателей и случайно попасть на мой поток.

Переход на следующий уровень

Создадим объект oDoor и привяжем к нему спрайт.

Создаем в oPlayer событие столкновения с oDoor.

Пишем в нем room_goto_next();.

Это все. Осталось лишь добавить еще одну комнату и поставить дверь.

Дополнительный курс

На нашем сайте также есть . В ходе огромной программы вы изучите не только язык Питон, но также научитесь создавать веб сайты за счёт веб технологий и фреймворка Джанго. За курс вы изучите массу нового и к концу программы будете уметь работать с языком Питон, создавать на нём полноценные ПК приложения на основе библиотеки Kivy, а также создавать веб сайты на основе библиотеки Джанго.

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