| [GcUp.ru] |
| Форма входа |
| Меню сайта |
| Categories | |||||
|
| Главная » Статьи » Создание игр |
| Как это будет. Изучив элементарные основы, невольно задаешься вопросом «а что дальше?». А дальше, уже пора сделать нечто полезное, что-то, что можно будет использовать как основу для своей игры. Но для начала давайте определимся с подходом. Итак, вот несколько вещей, которые будем учитывать:
Для столкновений нам потребуется всего один объект – объект-родитель. В игре может быть много объектов, а проверять столкновение с каждым в отдельности - слишком долго. С увеличением количества обеъктов-родителей они будут разделены на разные категории (например, предметы, которые можно подобрать, и которые можно разрушить). Вот далеко неполный список скриптов. Нам нужно будет их создать. Сделаем это чуть позже. Перемещение и проверка столкновений. Если перемещение объекта по комнате делается достаточно просто, то одним из сложнейших моментов в создании игры может стать - проверка столкновений. Благо, что в GML есть несколько встроенных функций для их проверки. Давайте рассмотрим эти вопросы более подробно, начиная с перемещения. Есть несколько способов задать скорость и направление движения объекту, но нам хватит перечисленных ниже.
Перемещая объект мы должны проверить, а не происходит ли столкновение. Есть несколько функций для выполнения этой задачи, но использовать будем всего две. 1. collision_line(x1,y1,x2,y2,obj,prec,notme) Обе функции возвращают ID (идентификатор) объекта с которым происходит столкновение. Это очень удобно, потому как мы будем знать, с каким объектом оно произошло и как нам нужно себя вести. Посмотрите на рисунок ниже. Зеленый прямоугольник – игрок, серый – стена и ступенька, желтый – враг. Обратите внимание на красный штрих-прямоугольник (всего два) возле объекта «игрок» - он «нарисован» функцией collision_rectangle*. Вся его область будет проверятся на возможное столкновение со стеной. Заметили две коротких штрих-линии, идущие в обе стороны? Они тоже «нарисованы», но уже функцией collision_line - с её помощью будет проверять столкновение со ступенькой. Линии, идущие от врагов, не проверяют столкновение как таковое, а точнее – мы его используем с другой целью – проверить, видит ли нас враг. Тот, который за стеной, как Вы поняли, не может нас видеть. А теперь ещё чуть подробней обо всём этом. У нас есть объекты «игрок» и «платформа». Первое с чего начнем – определим их взаимоотношения так, чтобы игрок не проваливался сквозь неё. Для этого нам потребуется несколько скриптов, которые и будут проверять столкновения. Выполним уже знакомые нам действия. Код действия «Execute script» для события «Create» объекта «o_player»: p_oncreate() Код действия «Execute script» для события «Step» объекта «o_player»: p_onstep() Это, как Вы заметили, названия скриптов, которые ещё не написаны и не созданы. Создайте два скрипта нажав на SHIFT+CTRL+C и назовите их как было написано выше. А теперь напишем для них код. Код скрипта «p_oncreate»: dcoll=0 Код скрипта «p_onstep»: if p_dcoll() Должно быть Вы увидели скрипт с именем «p_dcoll» - он ещё не создан, исправьте это. Напишите в нем следующее: Код скрипта «p_dcoll()»: dcoll=collision_rectangle(o_player.x,o_player.bbox_bottom, o_player.x+19,o_player.bbox_bottom+5+vspeed,o_pplatform,false,false) Запустите пример. Падает? Не провалился? Замечательно! Идем дальше. В игре не только пол есть, но и стены, лифт, лестница, коробка с пистолетом. Сейчас я приведу коды всех сценариев, которые и определяют все отношения между объектами Полный код скрипта «p_oncreate» (убедитесь в том, что он вызывается в событии «Create» объекта «o_player»): jump=false drcoll=0 Полный код скрипта «p_onstep» (убедитесь в том, что он вызывается в событии «Step» объекта «o_player»): if vspeed<0 if p_dcoll() if hspeed<5 hspeed+=1 if keyboard_check(vk_left) if hspeed>-5 hspeed-=1 if keyboard_check_pressed(vk_up) if jump=false if keyboard_check_released(vk_right) or keyboard_check_released(vk_left) Если Вы попытаетесь запустить игру сейчас, ничего не выйдет - GM выдаст множество ошибок о не найденных скриптах. Что бы всё работало, Вам нужно создать следующие скрипты с соответствующим кодом в них. Код скрипта «p_ucoll»: ucoll=collision_rectangle(o_player.x,o_player.bbox_top,o_player.x+19,o_player.bbox_top-5, o_pplatform,false,false) return true else return false Код скрипта «p_rcoll»: rcoll=collision_rectangle(o_player.bbox_right,o_player.y,o_player.bbox_right+1+hspeed,o_player.y+53, o_pplatform,false,false) return true else return false Код скрипта «p_lcoll»: return true else return false Код скрипта «p_drcoll»: drcoll=collision_line(o_player.bbox_right,o_player.bbox_bottom, return true else return false Код скрипта «p_dlcoll»: dlcoll=collision_line(o_player.bbox_left,o_player.bbox_bottom, return true else return false Код скрипта «p_dcoll»: dcoll=collision_rectangle(o_player.x,o_player.bbox_bottom,o_player.x+19, o_player.bbox_bottom+5+vspeed,o_pplatform,false,false) return true else return false Cкачайте пример-исходник с сайта www.Gcup.ru (ссылка). Там Вы обнаружите несколько дополнительных объектов: лифт, пистолет (точнее, просто стрельба пульками), лесенка. | |
| Всего комментариев: 4 | ||
| ||