Создание платформера - Game Maker - Статьи и уроки - -=DevelopeR=-
Главная Мой профиль Регистрация Выход Вход
Среда
22.10.2014
07:09
Приветствую Вас Гость | RSS ВходРегистрацияГлавная
Меню сайта
Категории раздела
Создание игр [37]
ОБЩИЕ РУКОВОДСТВА ПО СОЗДАНИЮ 3D игр
Game Maker [26]
Создание игр с помошью конструктора Game Maker
Статистика

Онлайн всего: 0
Гостей: 0
Пользователей: 0
Главная » Статьи » Game Maker

Создание платформера

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

 

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

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

 

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

Основа

Мы начнем с наиболее простой игры платформы. Ты можешь найти ее в файле platform_basic.gmd. В каждой платформенной игре существует два основных объекта: персонаж, управляемый игроком и блочный объект - который используется для пола (платформ) по которым игрок может ходить и стен, являющихся для игрока естественным ограничетелем движений. Нам понадобится два спрайта: один для персонажа и один для блока. Для персонажа мы используем простой мяч. Для блока возбмем (не-прозрачный) черный квадрат. Создаем два объекта: твердый блочный объект со спрайтом блока и объект персонажа.

Горизонтальное движение

Теперь мы должны определить движение персонажа. Проблема состоит в том, что наш герой должен идти по полу, верхней его части. При этом он не должен пересекать пол (не должен проваливаться). Если персонаж прыгает или падает с платформы, он должен правильно приземлиться на следующую платформу. Существует множество различных способов, посредством которых персонаж может ходить, прыгать и падать. Разные игры используют различные модели. Обычно для управления движением мы используем только три клавиши. Клавиша со стрелкой "влево" перемещает наш персонаж налево, клавиша со стрелкой "вправо" должна перемещать его направо и клавиша "вверх" или клавиша "пробел" заставляет его подпрыгивать.

 

Для начала давай рассмотрим движение влево и вправо. Первый способ, сделать его независимым от игрока, чтобы играющий мог только изменять направление движения героя, когда тот находится на платформе или в воздухе, когда он прыгает или падает. Даже при том, что второй вариант не совсем естественен (ведь в природе довольно трудно начать перемещаться влево, в то время как падаешь вниз), тем не менее он как правило позволяет добиться хорошего результа - (получаются более играбельные игрушки) и также они оказываются фактически проще для осуществления. Второй способ - когда ты нажимаешь и удерживаешь нажатой клавишу, герой начинает движение и перемещается он либо с постоянной скоростью, либо с ускорением. Остановимся на первом варианте. К сожелению мы не можем использовать действия для установки направления движений. Причина в том, что это создало бы помехи вертикальному движению, используемому для прыжков и падения (и позже и восхождения). Вместо этого мы просто изменим позицию. Ты также можешь использовать для этого действие или код. Использование действий мы применим в следующем. В событии для клавиши "влево" (Keypad) нам нужно одно действие, чтобы проверить, является ли позиция пустой. Указываем, относительное значение -4 и 0. (Так мы проверим, является ли позиция, слева от текущей пустой). Следующее действие, которое выполняется только если позиция действительно истинна, позволяет персонажу переместится относительно позиции -4, 0. Сделай тоже самое для события правой клавиши, но теперь используй 4 а не -4. В коде мы печатаем следующее:

 

{

  if place_free(x-4,y) x -= 4;

}

 

Цифра 4 указывает скорость, которую ты можешь изменить, если хочешь.

Прыжки

Далее мы нуждаемся в вертикальном движении. Его добиться более сложно. Чтобы позволить персонажу падать, мы можем использовать гравитацию (силу тяжести). Но необходимо также добится чтобы движение прекратилось, когда герой коснется пола. Помимо этого, нужно указать максимальную скорость падения, иначе персонаж будет двигаться слишком быстро. (Это будет выглядеть не очень красиво, а еще может вызывать и некотрые проблемы в выполнении). В результате мы помещаем следующую часть кода в шаговом событии (Step event) персонажа. Он устанавливает силу тяжести, основанную на том, находится ли что-то под персонажем (проверяем, является ли позиция 1 пикселя ниже персонажа свободной). Также он ограничивает вертикальную скорость.

 

{

  // устанавливаем силу тяжести (гравитация)

  gravity_direction = 270;

  if place_free(x,y+1)

    gravity = 0.5

  else

    gravity = 0;

  // ограничиваем скорость

  if (vspeed > 12) vspeed = 12;

}

 

Далее мы должны приземлиться. Что еще труднее чем может показаться. Это происходит, когда персонаж сталкивается с блочным объектом. В этом событии столкновения (Collision event) мы должны установить вертикальное движение на 0. Но оно может оставить персонаж, зависшим немного в воздухе над землей. (Причина в том, что персонаж перед столкновением помещается назад в его предыдущую позицию). Чтобы избежать этого - нужно переместить персонажа вниз, до тех пор - пока он не коснется блока. Делаем, но процесс должен быть выполнен только тогда, когда соблюдаются два условия: персонаж падает вниз (так vspeed > 0) и непосредственно ниже персонажа имеется блок (так not place_free(x,y+vspeed)). Иначе может произойти (редкий) случай, когда персонаж неожиданно подпрыгивает вверх или вниз. Все вышеперечисленное достигается следующей частью кода, который должен быть помещен в событие столкновения с блоком:

 

{

  if (vspeed > 0 && not place_free(x,y+vspeed)) move_contact(270);

  vspeed = 0;

}

 

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

 

{

  if (not place_free(x,y+1)) vspeed = -10;

}

 

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

 

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

Улучшение графики

Базовая платформенная игра, которую мы создали в предыдущем разделе работала, но выглядела она не очень привлекательно. Имеются две вещи, которые мы хотим изменить: это внешний вид главного героя и внешний вид фоновых изображений. Рассматриваемый вариант можно найти в файле platform_graphics.gmd.

Изображение для персонажа

Давай начнем с графики отображающей нашего главного героя. Мы будем использовать два разных (не-анимированных) спрайта: один для персонажа, смотрящего налево и один для смотрящего направо. И теперь нужно просто поместить в событие для клавиши (Left) действие (Change the sprite) и выбрать соответствующий спрайт (где персонаж смотрит влево). Аналогичное действие мы выбираем и для клавиши (Right), только здесь выбираем спрайт смотрящий уже направо. Не рекомендую тебе включать проверку точного столкновения (Precise collision checking) для этих двух спрайтов. Иначе тебе не избежать ситуации, когда персонаж твоей игры в момент прыжка будет зацепляться за края платформ. И наконец обязательно проверь, чтобы ограничивающие поля каждого из этих двух спрайтов были одинаковыми. Иначе, при повороте слева на право и наоборот - в некоторых игровых ситуациях могут возникнуть проблемы. (Для этого ты всегда можешь воспользоваться полями в (Bounding Box) включив опцию (manual)).

 

В более сложных играх ты скорее всего захочешь использовать анимированные спрайты. В этом случае тебе также понадобится статичный спрайт для твоего персонажа, отображающий его в момент, когда он неподвижно стоит на месте. Возможно ты также захочешь добавить спрайты для персонажа прыгающего, падающего, стреляющего и т.д. В этом случае придется использовать действие (Change the sprite) в различных в событиях. В частности, в событии ты скорее всего используешь статичный спрайт на котором персонаж просто стоит на месте. Кроме того, ты можешь используя действия рисования (Draw) - нарисовать нужный спрайт в событии рисунка (drawing event) в зависимости от ситуации. Например, ты можешь использовать проверку xprevious<x чтобы выяснить, двигался ли персонаж направо.

Платформы и стены

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

 

Чтобы добавить тайлы в твою комнату, сперва понадобится само фоновое изображение с нужными тайлами. Желательно чтобы тайлы содержащиеся в фоновом изображении имели фиксированный размер и были отделены друг от друга небольшой линией (в 1 пиксел) для того чтобы их легче было выбирать из общей кучи. В дистрибутив Game Maker включено достаточное, для первых шагов, количество разнообразных тайлов, но при желании ты всегда можешь найти еще кучу аналогичных или даже лучше, в сети Интернет. Для нашей простенькой платформенной игры мы сделали свой собственный, небольшой набор тайлов. Мы добавили его как прозрачный фоновый ресурс, под названием background_tiles.

 

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

 

Мы будем рисовать все наши замечательные платформы и стены прямо на фоновом изображении. Для этого мы используем опцию для создания плиточного фона (смотри главу 15 документации). Ты можешь использовать второй фон, чтобы придать платформам хороший внешний вид. В этом случае не забудь сделать фон с платформами прозрачным.

 

Хотя не стоит забывать об одной маленькой проблеме. Как было сказано выше, тайлы - это вего лишь способ улучшить графику. Они сами по себе не генерируют события или столкновения. Поэтому персонаж будет проваливаться прямо через них. Чтобы избегать этого, мы как и раньше нуждаемся в блочных объектах, которые использовали прежде. Мы помещаем объекты блока в соответствующие места поверх стен и платформ, созданных тобою из тайлов на фоновом изображении. Далее, сделав блочные объекты невидимыми ты добъешся того, что на экране будут отображаться не черные блоки, а красивые тайлы. Но блочные объекты при этом - реально остаются там, куда ты их помещал - следовательно персонаж не сможет проходить сквозь стены и будет приземляться именно на платформах. И все бы хорошо, если бы не одна проблемка. Блочные объекты, размером 16x16, могут оказаться слишком большими, чтобы качественно перекрыть фон. В связи с этим мы создаем несколько других блочных объектов размером 16x8 и 8x16. Опять делаем их твердыми. Чтобы избежать необходимости, определять события столкновения также и для них, в окне свойств объетка, во вложении (Advanced) включи для опцию (parent) для блочного объекта. Таким образом они будут обработаны точно также, как и большой блок.

Угрозы и преодоления

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



Категория: Game Maker | Добавил: Batman (27.07.2010)
Просмотров: 4733 | Комментарии: 1 | Рейтинг: 5.0/1
Всего комментариев: 1
1 ggggghhh   (18.04.2014 13:36)
Люди код с гравитацией не работает наже не опробовала текстовый фаил мешает

Имя *:
Email:
Код *:
Поиск




Деловая Сеть



Деловая Сеть


Copyright MyCorp © 2014
Rambler's Top100 Создать сайт бесплатно