Работы над so_arcade продолжаются а также начаты работы над новым проектом.
- Tag Archives Разработка SO Arcade
-
-
Демо версия
Я всетаки решил выпустить эту демо-версию не дожидаясь фикса багов под виндой. Эта версия содержит полный игровой цикл: старт-игра-ввод рекордов-старт. В дальнейшем в игре будет добавлено:
- Бустеры для игроков: оружие и броня
- Вражеские корабли научатся стрелять и двигаться в разные стороны
- Уровень сложности будет постепенно повышаться со временем
Собственно это наверно полный список фич которые будут добавлены в игру. После этих фич разработка будет остановлена. А вот собственно говоря и демки:
Ubuntu 8.10 x86_64 (1.6 Мб)
Windows (5.1 Мб)
Для использования пакета для ubuntu необходимо выполнить 2 команды:
apt-get install libglfw2
apt-get install libglew1.5Известные баги: при вводе vV или oO в виндовой версии в окне рекордов игра вылетает.
P.S.: Просьба сообщать о всех багах.
-
Знаменательный день
Сегодня знаменательный день, сегодня в репозитории появился долгожданный мною тег: so_arcade_demo_1. Реализовано много всего, уже даже можно поиграть и сохранить свои рекорды.
На выходных буду собирать и выкладывать бинарные сборки для ununtu x86_64, rhel5, win32 и возможно debian unstable и FC последних версий.
-
Второй скриншот.
Вашему вниманию представляется второй скриншот)
Скриншот сделан в виртуальной машине в которой был запущен RHEL5.
-
Почти демо
Итак разработка аркадки и движка продолжается! Буквально вчера было реализовано то, до чего у меня уже черти сколько времени не доходили руки — практически реализован основной процесс игры — тоесть убиение монстров и набор очков за это. В ближайшее время выложу это дело для тестовых целей.
Для реализации всей этой функциональности пришлось немного пересмотреть принцип работы сигналов. Если раньше сигналы всегда посылались всем слотам, которые привязаны к сигналу, то здесь это приводило к тому, что пуля могла продолжить лететь и сбить еще несколько кораблей противника. Пришлось делать возможность слоту самому сообщить менеджеру сигнала требуется ли дальнейшая обработка или нет.
-
Монстры
Добрался я до реализации монстров в своем маленьком проектике. Задача простая. Я хочу сделать чтобы небыло уровней, тоесть игрок имеет непрерывный геймплей который постепенно изменяется. При этом возникает сложность с тем что нельзя сделать заранее заданную карту по принципу «тут поставим 20 мобов таких, тут 10 таких, тут бос левел закончен». Игра может длиться неограниченное время и должна постепенно усложняться. Значит надо чтобы мобы появлялись динамически.
Вариант решения — поставить рандом выкидывающий мобов — это плохо, можно получить абсолютно не предсказуемые результаты типа двух босов подряд.
Значит надо делать чтото другое.
Покачто мысль дошла только до эмиттера мобов.
Т.е. создаем неки невидимый объект за пределами экрана. На каждый кадр он получает управление и решает — надоли создавать нового монстра. У него должны быть ограничения — неможет быть более N одинаковых монстров одновременно, вероятность появления моба M и другие условия, которыми можно управлять генерацией мобов.
Но чтоже такое сам моб. Моб — это самостоятельный объект незнанющий ничего об эмиттере. После его создания он должен двигаться по заранее заданному алгоритму (например по направлению к игроку) и выполнять указанные действия. Он должен понимать ситуацию попадания в него.
Об попаданиях позже, за сим все. Может у кого есть более интересные идеи по реализации монстров в аркаде?
-
Первый скриншот
Первый скриншот) Ужасный но зато первый
Учитывая что арта на данный момент нет никакого, все картинки взяты из Chromium B.S.U. В будущем планируется сделать таки выстреле через эмиттеры
-
Реализация стрельбы в стуктуре сигнал-слот
Вот и добрался я до реализации стрельбы в своей маленькой игрушке.
Взаимодействие различных объектов, в игровом движке MagicEngine, построено на сигналах. Каждый объект имеет некоторые слоты, которые могут получать параметры и сигналы.
Каждый сигнал может быть подключен к одному и более слотам, что позволяет обрабатывать от одного сигнала несколько действий, например сигнал отрисовки нового кадра привязан к слотам счетчика кадров, управления движением снарядов, счетчика фпс (в будущем).
Система сигналов построена так, что сцены получают сигналы верхнего уровня — от видео драйвера и перенаправляют их объектам сцены.
В такой схеме сцена обязана получать сигнал нажатия мышькой чтобы уметь правильно выделить объект, на который было произведено нажатие мышкой. При нахождении такого объекта он становится активным и ему посылаются все остальные сигналы (движение мышки, нажатие кнопок) кроме сигнала нажатия кнопки мыши, потомучто при нажатии мыши мы могли хотеть сделать чтото другое, например нажать другую кнопку меню. Фактически это означает что объект «корабль» не может получить сигнал нажатия мыши и произвести выстрел на прямую. Поэтому для реализации стрельбы был использован промежуточный сигнал, что, кстати, очень удобно. Теперь появилась возможность посылать этот сигнал нескольким объектам. Конечно это осложняет задачу hot-seat, но она решается с привязыванием сигналов к игроку.
Итак, реализация стрельбы в архитектуре сигнал-слот.
Имеется два объекта: Hero(это кораблик которым управляет игрок) и Ammo( это собственно говоря и есть сам выстрел, картинка выстрела).
По логике вещей при выстреле игрока объект Hero должен создать новый объект типа Ammo, который должен привязаться к сигналу нового кадра, и забыть про него. Дальнейшие действия выпущенного снаряда решаются самим объектом Ammo, к примеру именно он будет определять столкнулся ли он с врагом и посылать врагу сигнал hit(попадание).
Для реализации этого были сделаны следующее:
- Был перегружен объект scene (сцена) чтобы получить контроль над сигналом нажатия мышки (mouse_press). При получении этого сигнала посылается сигнал shoot(выстрел) с которым связан слот on_shoot(при выстреле) объекта Hero.
- При получении сигнала shoot объект Hero его обрабатывает (к примеру смотрит — а остыло ли оружие, есть ли еще заряды) и создает (или не создает) новый объект типа Ammo который сам связывается с сигналом нового кадра.
- Для того, чтобы можно было стрелять несколько раз пока один снаряд еще летит — было решено завести счетчик выстрелов и создавать объекты по этому счетчику, можно конечно было воспользоваться концепцией 300 пуль, но пока что в этом нет особой необходимости, да и сами сцены неумеют скрывать неиспользуемые объекты)
-
Ближайшие планы
Итак, решил составить список ближайших планов по разработке.
На данный момент впринципе неважно, по какому принципу будут создаваться объекты, главная задача — получить хоть какуюто техническую демку.
Что должно в нее войти: кораблик, который умеет стрелять по нажатию мышки и двигаться в разные стороны. Монстров добавим в следующей версии.
На данный момент наиболее интересно именно получить что-то, пусть и не особенно играбельное)
Что для этого осталось сделать:
- Создать объект «выстрел» (в будущем думаю использовать для этого двигающийся эмиттер частиц, но покачто пусть будет спрайт)
- Научить этот объект запускать по нажатию левой кнопки мыши.
- Скомпилять это чудо под винду
За код я не брался уже несколько недель, наверное под месяц, пора прекращать лентяйничать и начинать писать.