Добавлен Morkoffka,
опубликован
Раздел:
Game Maker
Что такое заскриптованное движение?
Начнём с того, что заскриптованным может быть не только движение. Скрипт - это английское слово(script) и переводиться оно как сценарий. Эти самые сценарии хранят информацию о всех событиях, которые поджидают игрока при прохождении игры. Заскриптованное движение - движение по определённому маршруту. В этой статье мы будем реализовать как само чтение этого маршрута, так и его запись во время игры.
Теория
Вспомним уроки информатики. Какие бывают алгоритмы?
Не помню
- Линейные
- Ветвистые
- Циклические
Только сравнивать скрипты со сценариями из оперы/балета не стоит, а то может образоваться мнение, что все скрипты представляют собой линейные алгоритмы. Скрипт может циклиться и иметь условия. В нашем случае мы будем использовать ветвисто-циклические алгоритмы(кто запретил их комбинировать). Нам понадобится некая таблица. Строками будет координата x, а столбцами y. А в ячейках будет записана информация о движении в этих координатах. Мы будем двигать машинки. Когда они будут в указанных координатах, они возьмут из ячейки направление и будут ему следовать. Поехали!
Практика
Заранее подготовим спрайты машинок и добавим в проект.
Теперь создадим комнату. Мы будем использовать виды. Размеры комнаты и её вида не важны, но я буду использовать стандартные размер вида и в несколько раз увеличенные размеры комнаты.
Теперь можно перейти к объектам. Для начала создадим таблицу. Для неё мы будем использовать отдельный объект. Назовём его md(у меня проблема с названиями :D). Создадим событие создания и засунем туда следующий код:
//Создаём координатную сетку размером с комнату
dir=ds_grid_create(room_width,room_height);
//Устанавливаем всем ячейкам сетки значение false
ds_grid_add_region(dir,0,0,room_width,room_height,false);
Вы наверное офонарели. Какая координатная сетка? Мы разве не таблицу создаём?
-Да. Мы создаём таблицу
Таблица это способ структурирования данных. Она представляет собой систему ячеек, каждая из которых находится на пересечении столбца и строки. Если подумать, то каждая ячейка помимо хранящегося в ней значения имеет ещё две величины. Это столбец и строка на пересечении, которых находиться ячейка. Так вот в нашем случае этими величинами будут x и y.
-Да. Мы создаём таблицу
Таблица это способ структурирования данных. Она представляет собой систему ячеек, каждая из которых находится на пересечении столбца и строки. Если подумать, то каждая ячейка помимо хранящегося в ней значения имеет ещё две величины. Это столбец и строка на пересечении, которых находиться ячейка. Так вот в нашем случае этими величинами будут x и y.
Сделаем несколько переносов строки(а то я сам запутался) и продолжим. ds_grid(координатная сетка) это тип данных в gms. Это некая сетка разбитая на ячейки, которые находятся между координатами x и y. Её может заменить и двумерный массив, но мы будем использовать именно ds_grid, т.к. она содержит ряд нужных нам функций. А вот их их описание:
ds_grid_create
Создаёт координатную сетку и записывает её идентификатор в переменную, который понадобится нам для операций с этой сеткой
переменная=ds_grid_create(ширина,высота);
ds_grid_add_region
ds_grid_get
Получает значение в указанных координатах
переменная=ds_grid_get(идентификатор сетки,x,y);
И бонусом переменные room_width и room_height это ширина и высота комнаты.
Теперь как сетка создана и всем ячейкам прописано false, можно приступать к созданию машинок.
У нас будет два состояния машинки:
Теперь как сетка создана и всем ячейкам прописано false, можно приступать к созданию машинок.
У нас будет два состояния машинки:
- Обучение(Запись)
- Практика(Воспроизведение)
ds_grid_set_region(md.dir,x-64,y-64,x+64,y+64,direction);
И вы должны были узнать, ds_grid_set_region и думаю без труда поймёте, что он тут делает. А он здесь записывает текущее направление в ячейки региона 128x128 центром которого является машина. Теперь при езде наш ученик записывает в ближайшие ячейки сетки своё направлению. Его будет читать второе состояние и следовать ему. А вот и пришло время создать объект для него. Назовём его car_test.
В Step пишем достаточно простой код(половиной которого являются комментарии):
В Step пишем достаточно простой код(половиной которого являются комментарии):
/*
Если в текущей координате сетки не записан false
меняем направление на то, что там записано
*/
if ds_grid_get(md.dir,x,y)!=false
{
direction=ds_grid_get(md.dir,x,y)
}
Теперь машинка меняет своё направление на значение записанное в ячейке с текущими координатами.
И конечно не забываем поставить ей скорость:
И конечно не забываем поставить ей скорость:
speed=15;
Для смены состояния будем использовать instance_change
instance_change(car_edu,true);
Второй параметр, это сохраняет ли объект переменные.
Последний штрих, это поставить объект с обучающим состоянием машинки в комнату, закрепить за машинкой вид и поставить какой нибудь фон, какую нибудь дорогу. Рекомендую скачать исходники и ознакомиться с системой движения и сменой объектов. Это был мой первый опыт в написании статей. Не судите строго, критикуйте конструктивно. Прошу извинить за возможные пунктуационные ошибки. Всем спасибо за внимание!
Последний штрих, это поставить объект с обучающим состоянием машинки в комнату, закрепить за машинкой вид и поставить какой нибудь фон, какую нибудь дорогу. Рекомендую скачать исходники и ознакомиться с системой движения и сменой объектов. Это был мой первый опыт в написании статей. Не судите строго, критикуйте конструктивно. Прошу извинить за возможные пунктуационные ошибки. Всем спасибо за внимание!
Исходник
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Отредактирован Morkoffka
Есть два условия для координат, которые находятся в комнате: