Как сделать платформер на гейм мейкер

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

Если вы решили все-таки сделать игру на Game Maker, то приступим. Для начала создаем объект камеры и назвем его obj_cam. В Create нужно прописать такой код. Совет не копирует код а сами пишите(так легче запомнить).

Code
d3d_start();\\Это значит что функция 3D включена
draw_set_color(c_white);\\Окружение будет белым цветом
z=20;
pitch=0;

Я решил не все писать кодом. Зачем если есть кнопки, которые упрощают:
Нужно добавить кнопку Set Friction и даем значение 0.4
И добавляем еще кнопку Set Cursor. Там ничего не меняем.
Теперь в событии Step пишем, а не копируем:

Code
direction -= (display_mouse_get_x() -display_get_width()/2)/10;
pitch += (display_mouse_get_y() -display_get_height()/2)/10;
pitch = max(min(pitch,100),-100);
display_mouse_set(display_get_width()/2,display_get_height()/2);

Со Step завершили.
Теперь нужно добавить управление:
В событии клавиши Влево:

Code
<
var xn,yn;
xn = x - sin(direction*pi/180);
yn = y - cos(direction*pi/180);
< x = xn; y = yn; >
>

В событии клавиши Вверх:

Code
Вставляем кнопку Set Variable
В верхнюю строчку пишем speed
В нижнюю 5.

В событии клавиши Вправо:

Code
<
var xn,yn;
xn = x + sin(direction*pi/180);
yn = y + cos(direction*pi/180);
< x = xn; y = yn; >
>

В событии клавиши Вниз:

Code
Вставляем кнопку Set Variable
В верхнюю строчку пишем speed
В нижнюю 5.

В событии Draw пишем такой код:

Все с obj_cam завершили.
Теперь создаем объект пола и потолка и называем его так obj_floor
и создаем фоны для пола и потолка и называем для пола floor для потолка roof
В событии Draw пишем такое:

Code
d3d_draw_floor(0,0,0,room_width,room_height,0,background_get_texture(floor),24,24);\\Это рисуется пол
d3d_draw_floor(0,0,64,room_width,room_height,64,background_get_texture(roof),12,12);\\Это рисуется потолок

И не забудьте сделать его твердым)
Все с obj_floor завершили.
Теперь создаем фон для стен и называем его wall.
Теперь создаем объект и называем его hor_wall делаем твердым.
В событии Draw:

Теперь создаем объект ver_wall, делаем твердым.
И в событии Draw:

А теперь возвращаемся к объекту obj_cam
В столкновении с hor_wall, пишем такое:

Code
x=xprevious;
y=yprevious;

В столкновении с ver_wall, пишем такое:

Code
x=xprevious;
y=yprevious;

Все с объектами завершено, теперь комната:
Создаем комнату и добавляем obj_cam и объект obj_floor где то с краю. И произвольно добавляем, стены не забываем что они у нас под именем ver_wall, hor_wall.

Глава I. Включение 3D режима
Итак, прежде чем начать расставлять объекты и подгружать в них 3D модели, необходимо включить режим 3D. Ведь вы не прочтете текст, написанный на скомканом листке бумаги, не выровняв его. Представим, что 3D режим - это тот самый скомканый листок, на котором написаны все 3D объекты, 3D модели и прочее, что нужно рисовать в 3D. Для того, чтобы разровнять наш листок, то есть включить 3D режим, создадим объект objCamera. В событии Create (создание) запишем код:

global.camsin = sin(direction*pi/180); //Эту строку можно просто запомнить.
global.camcos = cos(direction*pi/180); //И эту тоже

d3d_start() //Включаем сам 3D режим.
d3d_set_perspective(true) //Включаем перспективу
d3d_set_lighting(false) //Выключаем свет.
d3d_set_culling(false) //Выключаем НЕотрисовку сторон объектов, которые мы не видим (сложно объяснить, поэтому чтобы понять лучше поэкспериментируйте)

texture_set_interpolation(false) //Выключаем сглаженность текстур (можете включить, просто я предпочитаю выключать сглаженность)
z = 16 //Создаем новую координату Z (для простых игр без прыжков, поднятий по лестницам и тому подобным это можно не делать :D)


3D режим мы включили, теперь нам необходимо сделать прорисовку 3D объектов (чтение, уже выровненного листка).
Для этого, в событие Draw (рисование) напишем код:

d3d_set_projection(x, y, z, x+global.camcos, y-global.camsin, z, 0, 0, 1) //Эту строку можно также, просто запомнить. Ее изменение вам понадобится ОЧЕНЬ редко, если вообще понадобится

d3d_draw_floor(0, 0, 0, room_width, room_height, 0, background_get_texture(texture1), 16, 16) //Создаем плоскость. Синтаксис: d3d_draw_floor(x1, y1, z1, x2, y2, z2, текстура, hrepeat, vrepeat)

Вот и все.
Теперь осталось только создать фон, с названием texture1, загрузить в него любую текстуру и можете смело запускать ваше творение.
Позже выложу исходник к этой главе.

if(keyboard_check(ord("W"))) //Если нажата клавиша W
<
speed = 3 //Идем вперед
>
if(keyboard_check(ord("S"))) //Если нажата клавиша S
<
speed = -3 //Идем назад
>

//Далее начется "самый пугающий код", его можно просто запомнить
if(keyboard_check(ord("A"))) //Если нажали A
<
var xn,yn; ///Инициализируем новые переменные, действующие только в этом скрипте.
xn = x - sin(direction*pi/180); //Вычисляем где у нас лево
yn = y - cos(direction*pi/180); //Вычисляем где у нас лево
if not place_meeting(xn,yn,sblock) //Если ничего не мешает идти (sblock заменить на название родительского объекта всех ваших твердых объектов)
< x = xn; y = yn; >//Идем влево
>
if(keyboard_check(ord("D"))) //Если нажали D
<
var xn,yn; //Инициализируем новые переменные, действующие только в этом скрипте.
xn = x + sin(direction*pi/180); //Вычисляем где у нас право
yn = y + cos(direction*pi/180); //Вычисляем где у нас право
if not place_meeting(xn,yn,sblock) //Если ничего не мешает идти (sblock заменить на название родительского объекта всех ваших твердых объектов)
< x = xn; y = yn; >//Идем вправо
>
//Конец пугающего кода
if(keyboard_check(vk_nokey)) //Если ниче не нажимали
<
speed = 0 //Не двигаемся
>
global.camsin = sin(direction*pi/180); //Обновляем значение для global.camsin (ОБЯЗАТЕЛЬНО. )
global.camcos = cos(direction*pi/180); //Обновляем значение для global.camcos (ОБЯЗАТЕЛЬНО. )

//Данный код можно не запоминать а просто копировать
//Он нужен для создания свободного обзора мышкой .
xx = (display_mouse_get_x()-(display_get_width()/2))/16 //16 – скорость поворота по X, можно экспериментировать
yy = (display_mouse_get_y()-(display_get_height()/2))/16 //16 – скорость поворота по Y, тоже можно экспериментировать

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

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

Чтобы помочь вам быстрее овладеть инструментами Game Maker, мы собрали 2 сборника видеоуроков, где по шагам, наглядно, демонстрируется процесс создания игр.

Изучаем основы Game Maker

Базовый курс уроков Game Maker, поможет новичкам освоиться в программе и создать свою первую 2D игру. Автор видео подробно рассказывает, что нужно делать, как и зачем.

Учимся настраивать движение персонажей (влево, вправо, вниз и вверх).
Предназначение переменных в конструкторе Game Maker. Очень полезный урок.
Задаем параметр прочности (здоровья) для врагов.
Данный видеоролик расскажет вам, как добавить в игру экшена в виде перестрелок.
Задаем своему персонажу уровень здоровья и выводим его на экран.
Учимся основам создания искусственного интеллекта, на правдивых и ложных значениях.
Рандомные, или случайные события, помогут вам создать игру, где каждый уровень будет уникален. Смотрим и вникаем.
Настраиваем автоматическое движение за любым объектом. Пригодиться для создания виртуальных спутников.
Задаем дистанцию для определенных объектов.
Чтобы объекты не пропадали за пределами окна, стоит заранее настроить область их движения.
Учимся создавать многопользовательские игры, в которые можно играть с друзьями через интернет.
Даем врагам возможность вести прицельный огонь по заданным целям.
Добавляем в игру окно инвентаря для хранения и использования виртуальных объектов.
Добавляем возможность сохранения данных игры в отдельный документ.
Подробное объяснение понятия “цикл” и примеры его использования в разработке игр.

Знакомимся с жанрами

Сборник уроков для любителей. В данных видеороликах демонстрируется процесс разработки игр разных жанров. На наглядном примере показывают, как создаются TDS-стрелялки, платформеры, раннеры, стратегии и редакторы карт.

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

О, наконец-то практика! Но сначала все-таки узнаем, что движение тела, не что иное, как изменение его координат. Разумеется, в 2D играх, а значит и в GM, используется Декартова прямоугольная система координат. К сожалению (или к счастью), в GM ось ординат Y направлена вниз, а не вверх (ось абсцисс, как принято, направлена вправо). Вот картинка:

Изменяем х и у - двигаем объект! Элементарно, Ватсон! Достаточно в step событии объекта разместить код:

Важно: x и y - так называемые свойства объекта, являются встроенными разработчиками переменными, значения которых можно менять, и которые влияют на характеристики объекта и его поведение. Помимо всего, у объектов очень много свойств, к примеру, sprite_index или depth. Это также означает, что вы не сможете создать переменную с именем свойства. Но сейчас важны только свойства, относящиеся к движению. Примечание Uber

И, о да! Результат налицо, наш подопытный кролик потопал направо. Также можно и изменять координату у. Ради эксперимента, поиграйте со значениями.
А если движение на протяжении всей игры почти не изменятся? Как, например, движение платформы в платформере (влево-вправо, вверх-вниз). Для этого у каждого объекта есть свойства hspeed (от англ. horizontal speed), vspeed (vertical speed) и направление движения - direction (измеряется в градусах, от 0 до 360). В GM направления опять же немного отличаются от привычных, а именно:

  1. Создать объект, поместить его в комнату.
  2. В событии create объекта сначала попробовать изменять координаты (х-=2, у+=1, например). Какой можно сделать вывод?
  3. Теперь вместо изменения координат задайте hspeed и/или vspeed (например, hspeed=3) Понаблюдайте за эффектом.
  4. Ну и почти последний шаг: задайте переменную speed (скорость, она является результатом сложения hspeed и vspeed) и direction, заодно.
  5. Порадуйтесь своему успеху!

Кроме x и y, у нас есть ещё свойства, относящиеся к передвижению. Вот их список:
xprevious Отражает координату экземпляра объекта по оси X в предыдущем шаге.
yprevious Отражает координату экземпляра объекта по оси Y в предыдущем шаге.
xstart Отражает координату по оси X в текущей комнате при старте.
ystart Отражает координату по оси Y в текущей комнате при старте.
friction Отражает текущее трение экземпляра объекта (пикселей за шаг).
Трение просто постоянно замедляет объект, пока его скорость speed не упадёт до нуля. Примечание Uber
gravity Отражает силу гравитации для текущего экземпляра объекта (пикселей за шаг).
Стоит отметить, что это не скорость, с которой полетит объект в заданном gravity_direction направлении, а ускорение, которое получает объект и измеряется в пикселях за шаг в шаге (или шаг в квадрате). Примечание Uber
gravity_direction Отражает направление гравитации в градусах для текущего экземпляра объекта (270 - вниз).

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