Доброго времени суток пользователи портала GCUP.RU! Сегодня я решил написать урок о создании небольшого платформера RPG. Итак, что должно быть в RPG: 1.Прокачка героя. 2.Магия 3.Монстры
Но начнём с создания каркаса для игры. Создадим объекты o_hero и o_pol. Для создания гравитации в step’е героя напишем:
Code
gravity_direction = 270 //Направление гравитации - вниз. if place_free(x,y+1) //Если снизу нет столкновений... gravity = 2 //...гравитация равна двум. else //А если столкновения есть... gravity = 0 //...гравитация отключается.
Далее припишем код для передвижения героя:
Code
if keyboard_check(ord("A")) //если нажата клавиша A... { image_xscale = -1 //...отразить героя влево... if place_free(x-5,y)//...И если нет столкновений... { x-=5; image_speed = 0.5 // переместиться влево на 5 пк. со скоростью анимации 0.5. } } // if keyboard_check(ord("D")) { image_xscale = 1 if place_free(x+5,y) { x+=5; image_speed = 0.5; } } if keyboard_check(ord("W"))//если нажата клавиша W... { if place_free(x,y-1)/…сверху нет столкновения… { if not place_free(x,y+1)//...и снизу есть опора... { vspeed=-20//верт. скорость равна -20 (герой прыгает). } } }
Теперь научим героя не проваливаться сквозь пол. В событии столкновения с полом (объект o_pol) пропишите такой код:
Code
if (vspeed > 0 && not place_free(x,y+vspeed)) { move_contact(270); vspeed = 0; }
Ну вот, теперь герой может бегать по блокам. Кстати не забудьте поставить галочку «Твёрдый» у объекта пола. Так, а может сделать лестницы? А давайте! Нарисуйте спрайт лестницы и отцентируйте его. Теперь нажмите на кнопку «изменить маску», в графе форма поставьте «Прямоугольник», а в графе Рамка галочку на «Пример». Выделите середину лестницы в прямоугольник. Вот скриншот: Теперь у героя в столкновении в лестницой напишите:
Code
if keyboard_check(ord("W"))// если нажата клавиша W { vspeed=-5// верт. скорость РАВНА -5 (герой равномерно ползёт) x=o_les.x // выравнивание относительно лестницы. }
Всё! Готово! И наконец, начнём делать RPG часть. Для этого создадим новый объект без спрайта – o_control. В создании этого объекта надо написать все глобальные переменные:
Code
global.xp=0// опыт global.lvl=1//уровень global.maxim=100// макс. опыт global.sp_f=7 //скорость фаэрбола.
А в step напишем расчёт повышения уровня:
Code
if global.xp>=global.maxim//если опыта больше или столько же сколько макс. опыта... { //тут происходят действия при повышении уровня. global.lvl+=1//уровень +1 global.xp-=global.maxim//от кол-ва опыта отнимается макс. опыт global.maxim+=100//макс. опыт +100 global.sp_f+=2//скорость фаэрбола +2 show_message("Поздравляю! Вы достигли уровня " +string(global.lvl))//выводим сообщение. }
Теперь поставим отрисовку всего этого на экране:
Code
draw_text(0,0,"Опыта до следущего уровня: "+string(global.maxim-global.xp))//выводим кол-во опыта до следующего уровня.
Кстати, создайте новый шрифт и в «диапазоне символов» поставите от 0 до 255 и кнопочкой «установить шрифт» поставьте его в создание объекта o_control. Это нужно для вывода русских букв. Теперь сделаем ботов. В событии создания поставьте кнопочку «Движение в направлении» влево. А в step:
Code
gravity_direction = 270 //Направление гравитации - вниз. if place_free(x,y+1) //Если снизу нет столкновений... gravity = 2 //...гравитация равна двум. else //А если столкновения есть... gravity = 0 //...гравитация отключается.
if not place_free(x-12,y) || not place_free(x+12,y) // если слева или справа есть препятствия... { if not place_free(x,y+1)//...и снизу есть опора... { vspeed=-16//...совершаем прыжок. } } В столкновении с полом: if (vspeed > 0 && not place_free(x,y+vspeed)) { move_contact(270); vspeed = 0; }
Быстренько создадим объект o_ogr и в спрайт вставим любой кубик. Вернёмся к нашему монстру. В событии столкновения с объектом o_ogr перетащите кнопочку Рикошет с настройками: неточный, от всех объектов. Ну, всё теперь монстрик бегает от одного кубика к другому, перепрыгивая всё на своём пути. Остаётся научить нашего героя стрелять фаэрболами. Создайте новый объект o_fire и пропишите ему в создание:
Code
move_towards_point(mouse_x,mouse_y,global.sp_f)//лететь к мышке с скоростью global.sp_f.
В step:
Code
image_angle=direction//поворот в сторону движения
В столкновении с монстром:
Code
global.xp+=50//прибавляем опыт instance_destroy()//удаляем фаэрбол
И в столкновение с полом удаляем объект кнопочкой. И последнее: У героя в событии Глобального нажатия левой кнопкой мыши пишем этот невероятно сложный код:
Code
instance_create(x,y,o_fire)//создаем фаэрбол.
И в столкновении с монстром ставим рестарт комнаты:
Также если вы считаете, что данный материал мог быть интересен и полезен кому-то из ваших друзей, то вы бы могли посоветовать его, отправив сообщение на e-mail друга:
Игровые объявления и предложения:
Если вас заинтересовал материал «Создание платформера-RPG на game maker», и вы бы хотели прочесть что-то на эту же тему, то вы можете воспользоваться списком схожих материалов ниже. Данный список сформирован автоматически по тематическим меткам раздела.
Предлагаются такие схожие материалы:
Если вы ведёте свой блог, микроблог, либо участвуете в какой-то популярной социальной сети, то вы можете быстро поделиться данной заметкой со своими друзьями и посетителями.
Чё такая косячная статья? ты что торопился куда-то? Объяснения нет, иногда баги жёсткие, я конечно исправил твои ошибки, но что будут делать начинающие в программировании на ГМ извини конечно но + я тебе не поставлю статья лёгкая для начинающих а начинающие не смогут разобрать сленга профессионалов ГМ!
Тут ошибка в коде лестницы.Когда мой персонаж столкнулся с лестницей игра выдавала ошибку неизвестное значение o_les.И как добавить анимацию ходьбы и прыжка.
stalker5889, хороший урок. Спасибо. Только пожелание, выделяй в следующий раз имена объектов жирным или цветом. Имена объектов сливаются с текстом. Пиши ещё статьи, подобные с удовольствием прочту