Архив рубрики: Новости

Первая игра PacManRun

PacManRun — моя первая мелкая игра на своем движке(для проверки возможностей движка и своих сил).

Описание игры:

Простой раннер. Основная цель при помощи прыжков добраться до конца уровня, избегая препятствия на пути.

Состояние: В разработке

Платформы:

  • Linux — основная платформа разработки;
  • Windows — периодически делаю сборку и тестирую;
  • Android — периодически делаю сборку и тестирую.

Реализовано:

Главное меню. Коллизия с тайловой картой. Движение, прыжок персонажа. Уровней 19 — как бы временные.

Взаимодействие с игровыми объектами:

  • Thorn — смерть;
  • Ice — ускорение персонажа;
  • Gum — замедление персонажа;
  • Spring — пружина;
  • Portal — портал;
  • Score — игровые очки (не полная реализация);
  • Bonus — превращение персонажа в убийцу призраков;
  • Ghost — призрак, при столкновении смерть.

Скриншоты игры:

PacManRun1

PacManRun2

 

PacManRun3

 

PacManRun4

 

PacManRun5

 

Видео:

 Сборка демки, с багами 🙂 , под Windows:

Скачать

Как бы игровой движок

На разработку игрового движка ушло примерно 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).

Скриншоты, тестирование игрового движка:

ScreenEngine1

 

ScreenEngine2

 

ScreenEngine3

 

Пояснение:

  • Скриншот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

Свой велосипед с квадратными колесами

Дело было вечером, делать было нечего!!!

Как-то неожиданно пришла мне идея — попробывать создать игру.

Сразу созрел расплывчатый план:

  • Выбрать простой жанр для будущей игры;
  • Выбрать готовый игровой движок;
  • Придумать саму игру;
  • Как-то решить вопрос с графикой.

Выбор жанра игры

Так как опыта программирования игр нет и рисовать у меня не очень получается 🙁 , то игры со сложной механикой, 3D-моделями, красочным контентом и спецэффектами отпадают. На ум пришли игры — казуалки, головоломки, аркады. Но создавать «крестики-нолики», «тетрис», «три в ряд» как-то желания не было.

Поэтому выбор пал на платформер-раннер(runner).

Платформер — основной задачей игрока является преодоление препятствий (ям, шипов, врагов и т. д.) с помощью прыжков.

Выбор игрового движка

На данный момент существует множество игровых движков, начиная от профессиональных, для разработок игр класса ААА, до конструкторов игр(где даже не имея навыков программирования можно создавать игры), не буду их перечислять, их и так большинство всех знает.

Но я простого пути не ищу, поэтому вместо выбора игрового движка пришел к не адекватному решению — напишу свой 🙂 , ведь ничего сверхъестественного в раннере нет, и опыт разработки движка получу.

Так как мне очень полюбился C++/Qt, выбор пал на него.

Плюс в Qt реализованы продуманные классы:

  • Динамические списки, хеш-таблицы и т. д.;
  • Работа с векторами, матрицами;
  • Загрузка и работа с картинками;
  • Работа с VBO, VAO, шейдерами.

И в придачу поддержка платформ Windows, Linux, Android, iOS.

Идея игры

Раннер — главный персонаж постоянно движется вперед, основная задача игры добраться целым по конца уровня, преодолевая препятствия с помощью прыжков, собирая по пути поощрительные предметы (монеты, кристаллы и т. д.).

Кто главный персонаж? Какой графический стиль игры? Какие препятствия? Ничего толкового в голову мне не пришло, решил взять за основу игру Пак-Ман(Pac-Man).

Пусть главный персонаж — Пак-Ман(Pac-Man).

Препятствия:

  • Шипы;
  • Ямы;
  • Враги — Призраки(Ghosts).

Дополнительные предметы:

  • Лед(ускорение);
  • Песок(замедление);
  • Пружина(прыжок);
  • Портал(перемещение по уровню);
  • И конечно же точки(монеты).

И назовем это всё PacManRun.

Вот как-то так.

Графика

Ммм… С графикой беда. Знакомых, умеющих хорошо рисовать не нашлось, поэтому решил рисовать сам.

Результат

Вроде есть невнятный план, идея, но нет бюджета, человеческих ресурсов и самого ценного — времени.

Но объем и сложность игры не велики, поэтому для первой игры я думаю сойдет.

Посмотрим что из этого получиться.