Создание игры-лабиринта
Предисловие
Всем привет!
Этот урок поможет новичкам немного продвинуться в создании игр в замечательной программе game maker
Ну, что же - начнём?
Создание героя
Итак, для начала создаём спрайты движения игрока - вправо, влево, вверх и вниз
Sp_P1, Sp_P2, Sp_P3 и Sp_P4
Далее создаём объект - Obj_Player
При нажатии клавиши "влево"
Движение влево = 4
Анимация Влево
При отжатии клавиши "влево"
Движение 0
Сделать для клавиш "Вправо", "Вверх " и "Вниз"
Движения героя готовы!
Создаём стены, ставим в объектах стен галочки на "Твёрдый"
Событие в игроке
При столкновении с Стеной
Движение 0
Создаём выход
Событие в игроке
При столкновении с выходом
Если есть следующие уровни
{Переход на следующий уровень}
Иначе
{Таблица рекордов}
Логическая составляющая
Какой лабиринт без головоломок?
Давайте создадим КЛЮЧИ и ДВЕРИ!
Для начала вводим глобальную переменную, обозначающую сколько у нас ключей
В событие для игрока "Старт игры" перетаскиваем иконку кода
Тем самым вводим переменную key
Далее создаём дверь, прописываем игроку при столкновении с дверью остановку (как в событие со стеной)
Далее создаём объект ключа, собрав который мы получаем... Ключ!
Создаём объект "Ключ" и пишем в событии при столкновении с игроком
И после удаление себя
Всё просто!
Враги
Но одними головоломками сыт не будешь...
Создадим врагов
Для начала - тупой враг!
Движение вверх - вниз, не обращая внимания на игрока
Создаём объект врага, и делаем следующее
Вот и всё)
Осталось настроить отнятие жизней у игрока
И так, для начала устанавливаем 3 жизни в начале игры
Далее при столкновении с врагом отнимаем одну жизнь и перезагружаем уровень
И, если у нас меньше 1 жизни, показываем таблицу рекордов и перезагружаем игру
Но этот противник скучный и несёт в себе очень мало опасности
Создадим что нибудь посерьёзнее
Например врага, идущего ЗА ВАМИ
Враг идёт на координаты!
Вы прекрасны!
Но, допустим, наш враг должен смотреть куда идёт (Что логично)
Заставим его поворачиваться на координаты игрока
ВНИМАНИЕ, координаты спрайта врага должны быть точно ПО СЕРЕДИНЕ
ГОТОВО!
Очки, жизни и т. д.
Думаю, что все понимают что нам просто необходимо видеть количествово очков, жизней и ключей
Для этого создаём специальный шрифт, позволяющий писать на русском
Далее создаём объект, который будит за всё отвечать
В нём, в событие Draw раскладываем иконки с рисованием
Вот и всё
Осталось разместить все объекты по комнатам и готово!
Файлы
Скачать исходник Gmk
https://devtribe.ru/files/100016/1000566/Fail.gmk
Скачать результат
https://devtribe.ru/files/100016/1000566/Fail.exe
Смотрите также:
Комментарии
- 1
- 2 (Текущая страница)
Как насчет такого:
scr_camera_create(resolution_width,resolution_height,scale_factor)
// переменные
globalvar camera, camera_lookat, camera_projection;
// переменные разрешения
globalvar res_width, res_height, game_width, game_height, scale_factor; // scale factor should be set to a power of 2 as it divides the width/height by the scale factor
// Разрешение
res_width = argument0;
res_height = argument1;
scale_factor = argument2; // соотношение должно быть 2, 4, 6, 8, etc.
game_width = res_width / scale_factor
game_height = res_height / scale_factor
// Камера
camera = camera_create(); // init the camera
camera = camera_create_view(0, 0, game_width, game_height, 0, self, -1, -1, game_width/2, game_height/2);
view_set_camera(0, camera);
camera_lookat = matrix_build_lookat(x,y,-10,x,y,0,0,1,0);
camera_projection = matrix_build_projection_ortho(game_width,game_height,1,9999);
camera_set_view_mat(camera,camera_lookat);
camera_set_proj_mat(camera,camera_projection);
view_camera[0] = camera;
obj_camera:
Create Event:
// Инит Камеры
scr_camera_setup(640,480,1);
camera_follow = obj_player;
xto = x;
yto = y;
xto = lerp(x,camera_follow.x,.1);
yto = lerp(y,camera_follow.y,.1);
Step Event:
// Скорость движения камеры
x += (xto - x)/32;
y += (yto - y)/32;
camera_set_view_pos(camera,-(camera_get_view_width(camera)/2)+x,-(camera_get_view_height(camera)/2)+y);
if (camera_follow != noone) {
xto = camera_follow.x;
yto = camera_follow.y;
}
// Центрирование камеры на цели
camera_lookat = matrix_build_lookat(x,y,-10,x,y,0,0,1,0);
camera_set_view_mat(camera,camera_lookat);
// keep camera in the room!
if (camera_follow.x <= 16) {
camera_follow.x = 16;
}
if (camera_follow.x >= room_width - 16) {
camera_follow.x = room_width - 16;
}
if (camera_follow.y <= 16) {
camera_follow.y = 16;
}
if (camera_follow.y >= room_width - 16) {
camera_follow.y = room_width - 16;
}
// Подрезание камеры только в рамках 1 Room
camera_set_view_pos(camera,
clamp( camera_get_view_x(camera), 0, room_width - camera_get_view_width(camera) ),
clamp( camera_get_view_y(camera), 0, room_height - camera_get_view_height(camera) ));- 1
- 2 (Текущая страница)




















<a href= http://mosros.flybb.ru/viewtopic.php?f=2&t=635>Процесс получения диплома стоматолога: реально ли это сделать быстро?</a>