Суббота, 21 Декабря 2024, 16:26

Приветствую Вас Гость

Меню сайта
Категории каталога
Создание игр [358]
Статьи об общих понятиях связанных с созданием игр.
Программирование [84]
Гайды по программированию на разных ЯП.
Движки и Гейммейкеры [149]
Статьи о программах для создания игр, уроки и описания.
Софт [44]
Различные программы, в том числе в помощь игроделам.
2D-графика [14]
Уроки по рисованию, растр, пиксель-арт, создание спрайтов и пр.
3D-графика [17]
Уроки по моделированию, ландшафт, модели, текстурирование и пр.
Моддинг игр [5]
Модификация компьютерных игр, создание дополнений, перевод, хакинг.
Игры [169]
Статьи об играх, в том числе и сделанных на гейммейкерах.
Разное [133]
Статьи, которые не вошли в определённые разделы.
Наш опрос
Разработка игр для вас:
Всего ответов: 11107
Главная » Статьи » Создание игр

Создание платформера с ящиками на Game Maker: Studio
Здравствуйте! В этой статье мы научимся делать ящики в платформере на Game Maker: Studio, которые можно передвигать и использовать для деактивации каких-нибудь ловушек либо для других целей.
Для начала нарисуем спрайты игрока, стены и самого ящика. Названия можете дать произвольные, но например я давал такие как: s_block, s_hero и s_box:



Прежде чем делать сами ящики, состряпаем физику для игрока. Приступим? Давайте!
Создадим объект o_hero и присвоим ему спрайт игрока. Делаем событие Create и туда запишем небольшой код:

Код
speed_max = 4;  
jump_speed = 15;  
gravity_amount = 1;  
gravity_direction = 270;  
push_speed = 1;


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

Теперь создаем событие Step, и туда запишем код (сейчас я сделал комментарии кода, ибо просто непрактично будет его расписывать отдельно):

Код
if keyboard_check(vk_left)
{
  box = instance_place(x - speed_max, y, o_box);
  if box // Если на пути героя стоит ящик
  {
  var xx;
  xx = x;
  move_contact_all(180, speed_max); // Пододвигаемся вплотную к ящику
  xx = (x - (xx - speed_max)) * push_speed; // Вычисляем расстояние, на которое ещё может подвинуться игрок и умножаем его на коэффициент скорости движения ящика
  with box
  move_contact_all(180, xx); // Двигаем ящик на полученное расстояние
  move_contact_all(180, speed_max); // Двигаем игрока к ящику

  }
  else
  {
  if place_free(x - speed_max, y) // Если ничто не преграждает путь игроку
  x -= speed_max; // Двигаем игрока
  else
  move_contact_solid(180, speed_max); // Иначе - пододвигаемся вплотную к стенке
  }
}

if keyboard_check(vk_right) // Налогично движению влево
{
  box = instance_place(x + speed_max, y, o_box);
  if box
  {
  var xx;
  xx = x;
  move_contact_solid(0, speed_max);
  xx = (xx + speed_max - x) * push_speed;
  with box
  move_contact_solid(0, xx);
  move_contact_solid(0, speed_max);
  }
  else
  {
  if place_free(x + speed_max, y)
  x += speed_max;
  else
  move_contact_solid(0, speed_max);
  }
}

if place_free(x, y + 1) // Если под игроком нет платформы
{
  gravity = gravity_amount; // Устанавливаем гравитацию
}
else
{
  gravity = 0; // Иначе убираем гравитацию
   
  if keyboard_check(vk_up)
  {
  vspeed = -jump_speed;
  }
}


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

Теперь создаем объект o_block, присваиваем ему спрайт блока и ставим галочку на Solid (твердость):



Теперь в объекте игрока добавим событие столкновения с блоком, а потом прописываем туда такой код:

Код
x = xprevious;
y = yprevious;
move_contact_solid(direction, speed);
vspeed = 0;


Объект игрока должен выглядеть так:



Он нужен для того, чтобы игрока при столкновении с блоком останавливался.
Теперь самое интересное, это ящик! Создаем объект o_box. Делаем событие Create и вбиваем туда такой код:

Код
gravity_amount = 2;


Он задает ящику гравитацию. Теперь создаем событие Step и опять таки вписываем код:

Код
if place_free(x, y + 1) and !place_meeting(x, y + 1, o_hero)
{
  gravity = gravity_amount;
}
else
{
  gravity = 0;
}


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

Код
if vspeed != 0
{
  x = xprevious;
  y = yprevious;
  move_contact_all(direction, speed);
  vspeed = 0;
}


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

Код
if vspeed != 0
{
  x = xprevious;
  y = yprevious;
  move_contact_solid(direction, speed);
  vspeed = 0;
}


Это остановка. Теперь создаем комнату, расставляем объекты и радуемся!



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

Готовый пример (GMS): скачать
Категория: Создание игр | Добавил: MasterSambo (13 Мая 2015)
Просмотров: 11896 | Комментарии: 1 | Рейтинг: 3.8/4 |
Теги: для новичков, Создание игры, платформер, Game Maker Studio, квадратики, Урок, ящики, физика, GML, GMS
Дополнительные опции:
Также если вы считаете, что данный материал мог быть интересен и полезен кому-то из ваших друзей, то вы бы могли посоветовать его, отправив сообщение на e-mail друга:

Игровые объявления и предложения:
Если вас заинтересовал материал «Создание платформера с ящиками на Game Maker: Studio», и вы бы хотели прочесть что-то на эту же тему, то вы можете воспользоваться списком схожих материалов ниже. Данный список сформирован автоматически по тематическим меткам раздела. Предлагаются такие схожие материалы: Если вы ведёте свой блог, микроблог, либо участвуете в какой-то популярной социальной сети, то вы можете быстро поделиться данной заметкой со своими друзьями и посетителями.

Всего комментариев: 1
+0-
1 LunarPixel   (17 Мая 2015 09:47) [Материал]
LunarPixelВесь код в уроке полностью взят из чужого примера. Учитель как-нибудь это прокомментирует?

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Поиск по сайту
10 случ. движков
  • Evergine
  • O.H.R.RPG.C.E
  • MANU
  • Arrow
  • lifeEngine
  • Ursina
  • OpenBOR
  • Kodu
  • Easy Game Creator
  • J2DS
  • Друзья сайта
    Игровой форум GFAQ.ru Перевод консольных игр
    Все права сохранены. GcUp.ru © 2008-2024 Рейтинг