И так, все тут понятно из названия. Сразу приступаем к созданию. Что главным образом должно быть в любом платформере? Конечно же - игрок, движение и какой-никак противник. Но тут мы сделаем не только выше перечисленное, но и:
ИИ врага
Лёд со скольжением
Шаг 1. Спрайты.
Для начала создайте эти спрайты:
Игрок (выровняйте "по центру") - spr_player
Стена - spr_wall
Враг (выровняйте "по центру") - spr_enemy
Лёд - spr_ice
Лифт - spr_lift
Готово. Переходим ко второму шагу.
Шаг 2. Движение.
Создайте игрока - obj_player, присвоив ему аналогичный спрайт. Ему в step запишите:
Код
if place_free (x,y+1)//Если снизу нет объектов
then//То...
gravity=1.5//Гравитация равна 1,5
else//В противном случае...
gravity=0//Гравитация равна 0
Тут закончили. Комментарии были, так что все понятно. Идем дальше. Дописываем все тот же код в step:
Код
if keyboard_check(vk_left) and place_free(x-1,y)//Если зажата клавиша влево и слева нет объектов...
then//То...
{x-=5//Перемещаемся на 5 пикселей влево...
image_xscale=-1//Поворачиваем спрайт влево.}
Тут думаю все понятно. Дальше пишем вот что:
Код
if keyboard_check(vk_right) and place_free(x+1,y)//Если зажата клавиша вправо и справа нет объектов...
then//То...
{x+=5//Перемещаемся на 5 пикселей вправо...
image_xscale=1//Поворачиваем спрайт вправо.}
Закончили. Переходим к прыжку. Пишем все в тот же step:
Код
if keyboard_check_pressed(vk_up) and not place_free(x,y+1)//Если нажата клавиша вверх и снизу есть объекты...
then//То...
vspeed=-15//Прыгаем - вертикальная скорость равна -15
Дальше создайте obj_wall, присвойте аналогичный спрайт. Поставьте галочку на "Твердый".
Игроку в столкновение с obj_wall запишите:
Код
if not place_free(x,y+vspeed} and vspeed>0//Если ниже на кол-во пикселей, равных вертикально скорости нет объектов и вертикальная скорость больше нуля...
then//То...
{vspeed=0
move_contact(270)}//Останавливаем вертикальное перемещение игрока.
Шаг 2. Враги.
Тут дела обстоят сложнее, но создать простой ИИ не так трудно. Создайте obj_enemy, присвойте аналогичный спрайт. Пишите в step:
Код
if place_free (x,y+1)//Если снизу нет объектов
then//То...
gravity=1.5//Гравитация равна 1,5
else//В противном случае...
gravity=0//Гравитация равна 0
Тут, думаю, все было понятно. Дальше дописываем:
Код
if obj_player.x<x//Если игрок левее врага
then//То...
{x-=3
image_xscale=-1}//Поворачиваем спрайт врага влево. Двигаемся влево со скоростью 3.
if obj_player.x>x//Если игрок правее врага
then//То...
{x-=3
image_xscale=1}//Поворачиваем спрайт врага вправо. Двигаемся вправо со скоростью 3.
И допишем "привычный" код при столкновении со стеной:
Код
if not place_free(x,y+vspeed} and vspeed>0//Если ниже на кол-во пикселей, равных вертикально скорости нет объектов и вертикальная скорость больше нуля...
then//То...
{vspeed=0
move_contact(270)}//Останавливаем вертикальное перемещение врага.
Вот и все. Закончен даже простенький враг
Шаг 3. Лед.
Тут все весьма легко. Что нужно на льду? Правильно, чтобы игрок медленно скользил в ту сторону, куда он повернут. Значит создаем obj_ice, присваиваем аналогичный спрайт. Ставим галочку на "Твердый". Родителя объекта ставим "obj_wall" - это нужно для того, чтобы не копировать код столкновения игрока со стеной в код столкновения со льдом.
Пишем в step игроку:
Код
if place_meeting(x,y+1,obj_ice)//Если снизу есть лёд...
{if image_xscale=-1//И если спрайт повернут влево...
hspeed=-0.2//Движение влево со скоростью 0.2
else//В противном случае...
hspeed=0.2}//Движение вправо со скоростью 0.2
Вот и лёд готов. Теперь размещайте объекты в комнате - и радуйтесь. Все готово!
Эпилог.
В этом уроке мы создали более-менее продвинутый движок для платформера. Если вы хотите, что бы я написал тут о чем-то еще, то пишите в тему или ЛС - это будет написано в кратчайшие сроки. До свидания!