Отправляет email-рассылки с помощью сервиса Sendsay

Программирование в game maker

  Все выпуски  

Программирование в game maker


 

Программирование в Game Maker
Выпуск 3

 
 

Платформер

 
 

Приветствуем вас, дорогие читатели!

Этот номер посвящен разработке платформенной игры (Platformer).  Эта статья написана как для новичков, так и для тех, кто провел с Game Maker'ом не один год. Ну не будем тянуть кота за хвост и приступим.

Создаем Героя

Для начала нужно выбрать хороший спрайт. Добавляем спрайты и называем их s_hero_left и s_hero_right соответственно. Если все получилось, то идем дальше.

Теперь создаем объект под названием o_hero. Устанавливаем ему такие параметры:

Устанавливаем объекту спрайт s_hero_right;

--- Create ---
// Отключаем анимацию при создании (это чтоб он у нас не дергался как паралитик)
image_speed
= 0;

--- Step ---
// Гравитация (если под ним нет земли, то включаем гравитацию в противном случае отключить ее)

if place_free (x,y+1) {gravity = 0.5; gravity_direction = 270;} else {gravity = 0; gravity_direction = 270;}
// Если скорость больше 12, то приравниваем к 12 (чтоб сильно не разгонялся)
if (vspeed > 12) vspeed = 12;

--- Collision Event с o_wall ---
move_contact_solid (direction,12);
vspeed
= 0; // Останавливаемся

--- Keyboard Event for <Left> Key ---
image_speed = 0.3; // Включаем анимацию
sprite_index = s_hero_left; // Устанавливаем спрайт движения влево
move_contact_solid (180,3); // Сдвигаемся на 3 пикселя в направлении 180 градусов

--- Keyboard Event for <Right> Key ---
image_speed = 0.3; // Включаем анимацию
sprite_index = s_hero_right; // Устанавливаем спрайт движения влево
move_contact_solid (0,3); // Сдвигаемся на 3 пикселя в направлении 0 градусов

--- Key Press Event for <Up> Key ---
// Если под ногами земля, то прыгаем
if (place_meeting (x,y+1,o_wall)) vspeed = -8;

Делаем дополнения

Вот собственно и все. С героем разобрались. У нас в коде использован объект o_wall. Уверен, многие догадались, что это за объект. Грубо говоря, это наша земля. А точнее твердый объект (Solid) размером 16x16. Не забудьте назвать его o_wall.

Проверка

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

Улучшаем

Если вы уже не много проверили героя на прыгучесть, то возможно заметили, что в прыжке он дрыгает ногами. Чтоб нам избавится от этого не естественного движения, нужно добавить код image_speed = 0; в действие --- Step --- нашего героя:

{gravity = 0.5; gravity_direction = 270; image_speed = 0;}

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

--- Key Release Event for <any key> Key ---
image_speed = 0; // Отключаем анимацию, когда все кнопки отпущены

Пояснение

В коде присутствует функция move_contact_solid (dir, maxdist). Новички, наверное, спросят, зачем эта функция, если можно обойтись x- = 3 и x + =3. Но нет мои дороги читатели, в платформере с x- = 3 и x+ = 3 вы не оберетесь багов! Объект, не смотря на то, что он solid, постоянно зацепляется за края стен и глючит. Можете проверить. Возможно, и есть решение этой проблемы, но я его не нашел. И еще. Лучше функции move_contact_solid (dir, maxdist) для платформера я тоже не нашел.

Вот привел вырезку из справки о возможностях функции move_contact_solid (dir, maxdist):

move_contact_solid (dir, maxdist) - Заставляет образец объекта двигаться в направлении dir до тех пор, пока текущий образец объекта не столкнётся с образцом твёрдого объекта. Аргумент maxdist содержит максимальную дистанцию (в пикселях), которую следует пройти образцу объекта. То есть, если образец объекта проходит максимальную дистанцию не встречая образцов твёрдых объектов, то он всё равно остановится. Если вы хотите, чтобы образец объекта всё же двигался до столкновения, независимо от размера пройденного пути, присвойте maxdist значение -1 (для произвольного расстояния используйте отрицательные значения).

Конец

Теперь проверьте. Работает? Вот и отлично!

 

 

 

Интересный файл

 
 

И на последок ссылка на недавно появившуюся у нас lib библиотеку:

tdms 3d v2 (4160 кб).

С ее помощью вы сможете без проблем создавать 3D объекты, камеры, освещение. Одним словом: создание 3D игр упроститься во много раз. А если вам лень качать 4 мегабайта, то есть упрощенная версия этой библиотеки:
tdms 3D (509 кб).

Размер у ней меньше, как и самих функций, но для многих и такая библиотека сгодится.

Вот собственно и все на сегодня. С вами были ваши покорные слуги Mizzystic и Luxorix.
Не забываем заходить на наши сайты: www.mizzystic.narod.ru и www.luxorix.narod.ru
Хороших игр и интересных сюжетов! До новых встреч!


В избранное