На разработку игрового движка ушло примерно 5 месяца, при учёте, что он писался в свободное время и то не всегда.
В движке реализовано не всё, есть ещё над чем работать.
В данный момент реализованы следующие классы для удобства программирования графики:
- Mesh — для хранения вершин(по умолчанию создается два треугольника);
- Shader — для загрузки, компилирования, использования шейдерных программ;
- Texture — для загрузки и использования картинок;
- Sprite — спрайт, для вывода картинки, анимации.
Классы для удобства программирования игровой логики:
- Transformer — для манипуляции игровыми объектами(движение, вращение, масштабирование, задание центральной точки объекта);
- Camera — игровая камера, 3 видов(свободная, направленная, привязанная за точкой);
- ManagerKeyboard — для обработки клавиатуры;
- ManagerMouse — для обработки мышки;
- Setting — для изменения перспективы и области отображения;
- ManagerTileMap — для работы с тайловой картой(загрузка, прорисовка, обработка коллизий);
- GameScene — для загрузки игровой сцены, игровых ресурсов, обновление логики игровых объектов, прорисовка игровых объектов.
Менеджеры для работы со множествами:
- ManagerMesh — хеш-список вершин(классов Mesh);
- ManagerShader — хеш-список шейдеров(класcов Shader);
- ManagerTexture — хеш-список текстур(классов Texture);
- ManagerSprite — хеш-список спрайтов(классов Sprite);
- ManagerGameObject — хеш-список игровых объектов(классов GameObject);
- ManagerCamera — хеш-список камер(классов Camera).
Основной способ использования движка таков:
- Объявление игровых классов, наследуемых от GameObject;
- Реализация виртуальных методов для инициализации, обновление логики, прорисовки(Init, Update, Draw);
- Перед запуском основного игрового цикла, загрузка игровой сцены(GameScene.Load);
- В основном игровом цикле обновление логики, прорисовка игровой сцены(GameScene.Update, GameScene.Draw).
Скриншоты, тестирование игрового движка:
Пояснение:
- Скриншот1 — вывод тайловой карты, движение основного 2D персонажа, обработка коллизии с тайлами, движение активной камеры от первого лица;
- Скриншот2 — вывод тайловой карты, движение основного 2D персонажа, обработка коллизии с тайлами, движение, вращение активной камеры от первого лица;
- Скриншот3 — вывод тайловой карты, движение основного 2D персонажа, обработка коллизии с тайлами, переключение на камеру от третьего лица, вращение активной камеры.
Используемые клавиши:
1 — переключение на камеру от первого лица;
2 — переключение на камеру от третьего лица;
Влево/Вправо — движение 2D персонажа влево/вправо;
Пробел — прыжок 2D персонажа;
Левый клик мышки — перемещение позиции 2D персонажа;
w/s, a/d, c/v — движение камеры от первого лица вперед/назад, влево/вправо, вверх/вниз;
q/e, z/x, r/t — вращение камеры по Y, X, Z;
Сборка под Windows:
Ссылка на github: https://github.com/12sd/QtEngineGL