Воскресенье, 22 Декабря 2024, 18:25

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Создание "продвинутого" платформера [Урок]
SpeRdKeaRДата: Суббота, 14 Июня 2014, 15:51 | Сообщение # 1
KillerReborn
Сейчас нет на сайте
И так, все тут понятно из названия. Сразу приступаем к созданию. Что главным образом должно быть в любом платформере? Конечно же - игрок, движение и какой-никак противник. Но тут мы сделаем не только выше перечисленное, но и:
ИИ врага
Лёд со скольжением

Шаг 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)}//Останавливаем вертикальное перемещение врага.

Вот и все. Закончен даже простенький враг smile
Шаг 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

Вот и лёд готов. Теперь размещайте объекты в комнате - и радуйтесь. Все готово!
Эпилог.
В этом уроке мы создали более-менее продвинутый движок для платформера. Если вы хотите, что бы я написал тут о чем-то еще, то пишите в тему или ЛС - это будет написано в кратчайшие сроки. До свидания! smile


А звезды, будто мириады стрел,
Ловя на мушку силуэты снов.
Смеется и злорадствует любовь,
И мы с тобой попали в их прицел...


Сообщение отредактировал SpeRdKeaR - Суббота, 14 Июня 2014, 16:13
OverdraveДата: Суббота, 14 Июня 2014, 17:01 | Сообщение # 2
частый гость
Сейчас нет на сайте
Дофигища ошибок! Правда, еще на стадии прописывания перемещения персонажа я подумал "А как он будет делать передвижение по льду, если перемещение он делает через изменение координат?" Напомню, что hspeed в таком случае будет оставаться нулевым.

Также, прописывая place_meeting, надо указывать не просто х+1, а х+[число, на которое изменяется координата] или просто х+hspeed. (как у вас с гравитацией и vspeed сделано)
SpeRdKeaRДата: Суббота, 14 Июня 2014, 17:04 | Сообщение # 3
KillerReborn
Сейчас нет на сайте
Цитата Overdrave ()
Дофигища ошибок! Правда, еще на стадии прописывания перемещения персонажа я подумал "А как он будет делать передвижение по льду, если перемещение он делает через изменение координат?" Напомню, что hspeed в таком случае будет оставаться нулевым.

Ну да, затупил. Извини. Просто пишу так, как сейчас делаю в игре.


А звезды, будто мириады стрел,
Ловя на мушку силуэты снов.
Смеется и злорадствует любовь,
И мы с тобой попали в их прицел...
LunarPixelДата: Суббота, 14 Июня 2014, 17:09 | Сообщение # 4
старожил
Сейчас нет на сайте
SpeRdKeaR, зачем писать урок о том, что уже и так по сто раз везде разжевывалось?! Просто плюсиков в репу набить!? Нельзя что ли придумать что-нибудь интересное, не заезженное?!
Да и учитывая постоянные ошибки и недоработки в твоих уроках, думаю, стоит сначала самому научиться, а потом уже других учить.


  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг