Создание игры-лабиринта
Предисловие
Всем привет!
Этот урок поможет новичкам немного продвинуться в создании игр в замечательной программе game maker
Ну, что же - начнём?
Создание героя
Итак, для начала создаём спрайты движения игрока - вправо, влево, вверх и вниз
Sp_P1, Sp_P2, Sp_P3 и Sp_P4
Далее создаём объект - Obj_Player
При нажатии клавиши "влево"
Движение влево = 4
Анимация Влево
При отжатии клавиши "влево"
Движение 0
Сделать для клавиш "Вправо", "Вверх " и "Вниз"
Движения героя готовы!
Создаём стены, ставим в объектах стен галочки на "Твёрдый"
Событие в игроке
При столкновении с Стеной
Движение 0
Создаём выход
Событие в игроке
При столкновении с выходом
Если есть следующие уровни
{Переход на следующий уровень}
Иначе
{Таблица рекордов}
Логическая составляющая
Какой лабиринт без головоломок?
Давайте создадим КЛЮЧИ и ДВЕРИ!
Для начала вводим глобальную переменную, обозначающую сколько у нас ключей
В событие для игрока "Старт игры" перетаскиваем иконку кода
Тем самым вводим переменную key
Далее создаём дверь, прописываем игроку при столкновении с дверью остановку (как в событие со стеной)
код гласит:
Если количество ключей больше 0
{
Количество ключей = количество ключей - 1
Удалить свой объект
}
Далее создаём объект ключа, собрав который мы получаем... Ключ!
Создаём объект "Ключ" и пишем в событии при столкновении с игроком
И после удаление себя
Всё просто!
Враги
Но одними головоломками сыт не будешь...
Создадим врагов
Для начала - тупой враг!
Движение вверх - вниз, не обращая внимания на игрока
Создаём объект врага, и делаем следующее
Вот и всё)
Осталось настроить отнятие жизней у игрока
И так, для начала устанавливаем 3 жизни в начале игры
Далее при столкновении с врагом отнимаем одну жизнь и перезагружаем уровень
И, если у нас меньше 1 жизни, показываем таблицу рекордов и перезагружаем игру
Но этот противник скучный и несёт в себе очень мало опасности
Создадим что нибудь посерьёзнее
Например врага, идущего ЗА ВАМИ
И так, в событие врага "ШАГ" вставляем:
Враг идёт на координаты!
Вы прекрасны!
Но, допустим, наш враг должен смотреть куда идёт (Что логично)
Заставим его поворачиваться на координаты игрока
ВНИМАНИЕ, координаты спрайта врага должны быть точно ПО СЕРЕДИНЕ
ГОТОВО!
Очки, жизни и т. д.
Думаю, что все понимают что нам просто необходимо видеть количествово очков, жизней и ключей
Для этого создаём специальный шрифт, позволяющий писать на русском
(Жирность, курсив и шрифт можно менять на свой вкус)
Далее создаём объект, который будит за всё отвечать
В нём, в событие Draw раскладываем иконки с рисованием
Вот и всё
Осталось разместить все объекты по комнатам и готово!
Файлы
Скачать исходник Gmk
https://devtribe.ru/files/100016/1000566/Fail.gmk
Скачать результат
https://devtribe.ru/files/100016/1000566/Fail.exe
Смотрите также:
Комментарии
- 1 (Текущая страница)
- 2
Пожалуйста, проверьте картинки. Они не открываются.
Куда можно задать вопрос по поводу игры?
Как сделать так, чтобы карта двигалась за персонажем? т.е. персонаж - всегда в центре, а при движении в любом направлении, карта тоже двигалась так, чтобы персонаж снова оказывался в центре. (сделал карту больше 2000 на 2000 и пропорции стали плохими)
Куда можно задать вопрос по поводу игры?
Автор довольно давно не заходил.
Как сделать так, чтобы карта двигалась за персонажем
Через функцию view не пробовал?
Jusper, пробовал, но не добился нужного результата... появилась идея сделать окно игры, к примеру 1100х600 примерно, чтобы помещалось в экран и сделать пролистывание карты как в браузере например, и сделать это горизонтально и вертикально, чтобы мышкой можно было прокрутить вниз или вправо-влево, но вот это не знаю как реализовать...
чтобы мышкой можно было прокрутить вниз или вправо-влево
Если мышь двигает по принципу края экрана, то:
Необходимо узнать с какой стороны находится курсор от центра экрана и двигать в нужную сторону. Чтобы узнать с какой стороны находится курсор, нужно вычесть координаты мыши от координат центра вида, а затем пропустить через функцию sign(), чтобы получить -1, 0 или 1.
Затем прибавлять координаты вида на эти значения.
Вариант, когда мышь двигает камеру drag'ом:
Create: dragging = false; Step: if (dragging) { view_xview = view_xview + drag_x - mouse_x; view_yview = view_yview + drag_y - mouse_y; view_xview = max(0, min(view_xview, room_width - view_wview)); view_yview = max(0, min(view_yview, room_height - view_hview)); } Glob left pressed: dragging = true; drag_x = mouse_x; drag_y = mouse_y; Glob left released: dragging = false;
Куда более правильно вставить код?
Куда более правильно вставить код?
Я не автор статьи, могу только подсказывать функции, которые знаю.
Вставь вот это в step event должно помочь, если я себе правильно представляю, что ты хочешь сделать.
if (mouse_x < view_xview+10) view_xview -= 15 if (mouse_x > view_xview+view_wview-10) view_xview += 15 if (mouse_y < view_yview+10) view_yview -= 15 if (mouse_y > view_yview+view_wview-10) view_yview += 15
Вот что у меня получилось:
Созданил объект obj_controller
Добавил событие Step, Код: view_xview[0] += 0;
Добавил объект в комнату
Включить использовать виды (Enable the use of Views на Views вкладке)
Набор Visible when room starts для View 0
Определил видимый квадрат
Что получилось в итоге: когда персонаж доходит до края, то край сдвигается, так и нужно, дошел до левого края, камера подвинулась, всё ок, но захотелось чтобы камера всегда центрировала изображение персонажа т.е. чтобы персонаж был всегда в центре камеры. Как это реализовать? в коде не силен
Вот скриншоты https://dropmefiles.com/BtBXU
- 1 (Текущая страница)
- 2
CollectableItemData.cs
[CreateMenuItem(fileName = "newItem", menuName = "Data/Items/Collectable", order = 51]