В прошлой статье мы с вами за пол часа сделали арканоид на Game Maker Studio. Если по каким-то причинам упустили, то прошу предварительно ознакомиться с данной статьей:
В этой же статье мы немного доведем игру до ума. Прикрутим ей различные фичи, добавим приятные визуальные мелочи. Без лишних слов, давайте продолжим!
Создаем GUI
Если помните, мы в нашей игре сделали 5 жизней для игрока, но проблема была в том, что эти жизни нигде не отображались и игрок не понимал, сколько у него в запасе еще попыток. Давайте быстро исправим эту недоработку.
GUI - это graphical user interface, т.е. графический интерфейс пользователя. Т.е. это то место на экране, где отображаются жизни, уровень здоровья, магии, кол-во патронов и т.д. (в общем вся необходимая для игрока информация).
Зайдите в редактор комнат (в наш первый уровень) и добавьте еще один слой, поставив его выше всех. Как вы наверное знаете, чем выше в иерархии слой, тем выше слоем он будет рисоваться в игре (т.е. будет рисоваться поверх всей остальной графики).
Так же, не выходя из редактора комнат, зайдите в событие создание комнаты Creation Code и пропишите в ней следующий код:
Этим кодом на новом слое мы создаем объект "obj_GUI", который и будет отрисовывать кол-во жизней на экране. Этот объект мы еще не добавляли в игру, по этому давайте создадим его. В нем будет всего одно событие Draw GUI:
Все, теперь кол-во жизней у нас отображается на экране. Запустите и убедитесь сами!
Уничтожаем блоки красиво
В первой версии, попав мячом в блок, он моментально исчезал. Это конечно выглядит не очень красиво. Давайте добавим очень простенькую анимацию при уничтожении блока (я сделал так, чтобы блок просто уменьшался).
Немного подредактируем объект блока. В событии создания добавляем одну переменную:
В событии шага же прописываем следующий код:
Далее, думаю вы уже догадались, что теперь нам в момент столкновения мяча с блоком нужно не удалять блок, а просто переключить его переменную die с состояния false (ложь) на true (истина).
Заходим в редактор объекта мяча, находим событие столкновения его с блоком и чуть меняем код на следующий:
Запустите и проверьте, что поменялось!
Добавим бите немного "прыгучести"
У каждого объекта в мире на любое действие есть противодействие. Неплохо было бы, если бы и наша бита как-то реагировала на удар мяча об нее. Так давайте сделаем!
Для начала давайте "запомним" начальное положение биты по координате y. Для этого введем переменную yy, которая при старте уровня будет равна координате y биты:
Нам эта переменная нужна для того, чтобы бита могла вернуться в исходное положение, ведь при ударе мяча об нее, мы планируем отклонять биту от этого положения. Давайте пропишем код, отвечающий за возврат биты в событии шага (Step) биты:
Для этого я использовал функцию линейной интерполяции lerp (к слову одна из моих любимейших и часто используемых функций). Ее смысл в том, что она меняет значение одной переменной к другой по особой формуле, которая придает плавности движению биты.
Далее, как вы опять же наверное уже догадались, нам нужно в момент удара мяча о биту отклонить ее немного вниз (я опускаю на 10 пикселей).
Запускайте игру и наслаждайтесь этой пружинистой битой!
Делаем переход на следующий уровень
Давайте еще добавим условие, чтобы при уничтожении всех блоков у нас осуществлялся переход на следующий уровень. Ради этого дела думаю не будем создавать новый объект, а просто пропишем код в объекте obj_GUI:
Теперь сделайте несколько уровней и наслаждайтесь игрой!
Спасибо, что дочитали статью до конца! Ставьте лайки, делитесь ей с другими, задавайте вопросы, оставляйте комментарии, пожелания и т.д. Далее игру еще есть куда улучшать! Можно добавить бонусы, выпадающие из разбитых блоков, которые будут расширять биту, добавлять пулемет на биту и пр. Можно добавить несколько типов блоков, которые ведут себя по разному. Например, блоки, которые нельзя разбить или блоки, которые разбиваются с нескольких раз и т.д. Можно еще добавить музыку и звуки в игру (я как-то забыл об этом написать).
В общем пробуйте улучшать игру. Либо напишите в комментариях, что именно хотите добавить в игру, и я напишу об этом урок.