Главная Новости

Разработка казуальных игр с помощью Qt Framework

Опубликовано: 01.09.2018

1 Что нужно для выпуска игры?

В этом разделе описано почему

я предлагаю использовать Qt Framework.

Многие хотят разрабатывать игры, но не все попробуют это делать. Совсем незначительная доля программистов завершит работу и выпустит хоть что-то, во что можно играть. На самом деле, после того, как я опубликовал ряд материалов по этой теме на блоге, ко мне начали массово писать в социальных сетях с просьбой «научить» или предложением «разрабатывать игры вместе и учиться». Все они получали от меня очень простую задачу — ссылку на одну из моих заметок с описанием заготовки игры типа этой [13] и предложение разобраться с материалом, слегка доработав пример. Ни один начинающий «Game Developer» с этим не справился.

1.1 Чужой негативный опыт. Как не потратить время впустую?

Тот факт, что десятки человек хотят что-то разрабатывать, но не могут осилить 200 строчек хорошо документированного кода говорит о том, что дальше желания у этих людей никогда не зайдет, т.к. в «дикой природе» такой код вообще редко встречается. Чего же этим людям не хватает?

они слишком много готовятся и слишком мало пишут код. Это проявляется например в виде просмотра десятков роликов по разработке игр, которые снимают всякие упыри; они не могут определиться с игровым движком и языком программирования. На популярных форумах по программированию за последний год вы найдете десяток «проектов», где хотят писать игры, но для этого решают сначала написать свой собственный игровой движок; они вечно собирают команду таких же ребят. Их беседы не уходят дальше обсуждения все тех же движков; иногда они заводят блог (или используют с той же целью тему на популярном форуме), где начинают планировать разработку своих игр, описывать механизмы взаимодействия объектов в игре и т.д. Я не скидываю ссылки на такие сайты, т.к. читать их не интересно — дальше планов дело никогда не заходит.

Чтобы не стать одним из них нужно начать писать побольше кода на том языке программирования, который лучше всего знаешь. Таким языком может быть и Паскаль и Бэйсик. Надо понимать, что на нормальное освоение С++ или Java уйдет уйма времени и эта задача никак не связана с целью «разработки игр».

1.2 Мой личный опыт

Впервые разработкой игр я занялся учась на четвертом курсе — меня попросили написать игру «Питон» с разными доработками. Игру я писал на C++, а графику реализовал с помощью WinAPI. Это была курсовая, сделанная для какого-то двоечника.

Больше разработка игр меня не интересовала, но в 2012 году я случайно устроился работать в фирму, которая только этим и занималась. Пол года я писал игры на их самопальном движке, мне стало скучно, уволился. Кстати, используемый в этой конторе движок был просто ужасным, хотя с его помощью были разработаны десятки игр. Движок позволял управлять анимацией, и привязываться к таймеру. Привязка всегда осуществлялась с сallback-функции, а логика разрабатываемых игр провоцировала вкладывать одну лямбда-функцию в другую десятки раз. Код получался отвратительный.

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

В 2014 году я устроился на работу Java-программистом. С разработкой игр это связано не было, но пришлось работать и графическим интерфейсом и отображением информации на географической карте. В это время я смог оценить насколько Qt удобнее Swing и прочих библиотек построения интерфейса для Java. При этом в разработке игр огромное внимание уделяется интерфейсу.

На настоящий момент на google play можно найти две мои поделки — казуальные игрушки. Первая — ремейк старой логической игры «Полный квадрат», результаты я описал в статье « Разработка игры на С++, Qt » [1], « Публикация Qt-приложения для Android » [2]. Вторая — логическая игра на развитие памяти по мотивам школьных графических диктантов: « Разработка игры для развития памяти под Android (C++, Qt)» [3]. Каждый раз после завершения игрушки (да и других поделок) я просматриваю код и выбираю фрагменты, которые можно использовать повторно — описываю их на блоге или на форуме [4].

1.3 Чужой позитивный опыт

На Хабрахабр описано множество хороших мотивирующих статей из которых можно сделать выводы о правильном поведении успешного программиста, вот пара из них:

Вы можете поискать и другие подобные истории, но вы точно не найдете среди историй со счастливым концом такую, где автор поступил в ВУЗ, протупил 4 года, получил диплом и … — написал успешный продукт. Эти статьи мотивируют (и правильно) садиться и писать код вне зависимости от вашего образования. Читать параллельно книжки никто не запрещает.

2 Qt и мобильная разработка

В этом разделе приведены ссылки

на материалы, которые помогут вам выпустить свою первую игру

Вся эта длинная преамбула написана чтобы убедить:

не ждать чуда от нашей системы образования и развиваться в выбранном направлении самостоятельно; писать больше кода с использованием тех инструментов, которые вам уже знакомы.

При этом во многих школах и ВУЗах изучают язык С++, нередко при этом используют библиотеку Qt. Это объяснимо — библиотека гораздо проще, чем даже STL (имею ввиду части, касающиеся контейнеров, файлов и т.п. — то, что обычно изучают студенты). При этом далеко не каждый студент пытается собрать свое приложение для телефона, но оно с большой вероятностью будет работать точно также как десктопе и это удобно. Кстати, с помощью С++ и Qt написан мобильный клиент 2gis [8], а также Telegram [9].

О достоинствах и недостатках разработки с Qt написано много статей, при их чтении важно учитывать, что с каждым новым выпуском библиотеки решается часть проблем. Бегло просмотрев одну из них [10] можно понять, что в Qt не хватает некоторых визуальных элементов, которые, впрочем, можно реализовать вручную. Однако, стоит ли изобретать велосипед, если можно легально взять готовый в чьем-нибудь репозитории?

2.1 Заготовки для мобильной разработки игр с помощью Qt

Ниже приведены ссылки на небольшие заметки, в каждой из которых описано решение какой-либо проблемы — например, разработка элемента управления, которого в Qt не хватало или просто описание механизма, важного для разработки игр:

Графическая сцена [10] — важнейший элемент для разработки игр. Эффективно реализовать ее вручную очень сложно. В Qt она может отображать одновременно тысячи элементов. На ней размещаются игровые объекты: в Qt имеются встроенный механизм для плавного изменения свойств. Для объектов сцены таким свойством могут быть координаты — в заметке « Qt — анимация на графической сцене » [12] описан соответствующий пример.

в играх часто используется, так называемая, спрайтовая анимация — когда анимированное изображение представляется в виде набора кадров. В заметке « Спрайтовая анимация на QGraphicsScene » [13] приведены классы, позволяющие без особого труда добавить отображение такой анимации в ваше приложение; почти во всех играх необходимо обрабатывать столкновения объектов — например, если ваш персонах при перемещении должен собирать монеты или стрелять в противников (столкновение пули и противника). В каркасе графического представления также есть готовое решение, пример использования которого приведен в заметке « Обнаружение столкновений объектов на графической сцене Qt » [14]; очень часто в играх требуется загрузить большую карту и отображать ее часть около главного героя, например такой прием использовался в старом Принце Персии, Марио, Робокопе. Реализация такого поведения описана в заметке « Отображение части графической сцены Qt » [15]. Снимок экрана относится к трем последним пунктам:

почитав отзывы на Google Play можно заметить, что пользователи нередко не могут разобраться в игре. Особенно в логических играх. Одним из вариантов решения проблемы является вывод справки. Это простая задача, которую в библиотеке Qt можно решить с использованием встроенных классов — справку при этом можно формировать в .html-формате, что очень удобно: « Вывод справки в html формате » [16];

если у вас в игре пользователь должен иметь возможность выбрать уровень для прохождения — то вам нужно организовать меню с иконками для уровней. Иконки иногда можно загружать с фалов, а чаще их нужно строить программно. Меню должно иметь возможность прокручиваться пальцем, а также корректно перестраиваться при повороте телефона. Соответствующий компонент предложен в заметке « Меню для телефона. Скролл пальцем. QGraphicsScene » [17];

В заметке « Стек виджетов Qt » [18] предложен класс позволяющий очень удобно организовать стек виджетов — переключение экранов в мобильном приложении. Например, когда пользователь начал играть, но затем открыл окно помощи, в нем — окно демо-игры, … — когда он вернется в игру, его прогресс не должен исчезнуть. В заметке « Qt — обработка Android back button » [19] показано как к стеку виджетов приделать обработку стандартной кнопки Android back button.

Вот и конец. Скорее всего список заготовок будет дополняться. Однако, я предлагаю подумать начинающим Game Developer-ам подумать дважды перед тем как начинать писать свои велосипеды или кидаться на изучение новых языков. Если вы не знаете с чего начать — соберите игру типа Сокобана с использованием приведенных выше готовых классов.

3 Список использованной литературы

Разработка игры на С++, Qt . URL: https://pro-prof.com/archives/1520 Публикация Qt-приложения для Android . URL: https://pro-prof.com/archives/1568 Разработка игры для развития памяти под Android (C++, Qt) . URL: https://pro-prof.com/archives/4162 Форум: Использование библиотеки Qt/QML. URL: https://pro-prof.com/forums/forum/programming/cplusplus_programming/qt-library-using Как я стал андроид-разработчиком без профильного образования, попутно мешая бетон. URL: https://habrahabr.ru/post/270537/ Как легко и непринужденно написать игру за 2 года. URL: https://habrahabr.ru/post/279195/ Как я стал программистом. Путь от питерского бездомного до Senior Developer-а за 6 лет. URL: https://habrahabr.ru/company/veeam/blog/267187/ Оптимизация Android приложений под х86. Опыт 2GIS. URL: https://habrahabr.ru/company/intel/blog/205622/ Репозиторий Telegram. URL: https://github.com/Kaffeine/telegram-qt Радость и грусть разработки на Qt под Android (и не только). URL: https://habrahabr.ru/post/280528/ Рисование на графической сцене Qt . URL: https://pro-prof.com/forums/topic/qgraphicsscene-drawing Qt — анимация на графической сцене . URL: https://pro-prof.com/forums/topic/qt-qgraphicsitemanimation-example Спрайтовая анимация на QGraphicsScene Qt . URL: https://pro-prof.com/forums/topic/qgraphicsscene-qt-sprite-animation Обнаружение столкновений объектов на графической сцене Qt . URL: https://pro-prof.com/forums/topic/qt_collision_detection Отображение части графической сцены Qt . URL: https://pro-prof.com/forums/topic/qt_part_of_qgraphicsscene Вывод справки в html формате . URL: https://pro-prof.com/forums/topic/qt-html-tutorial Меню для телефона. Скролл пальцем. QGraphicsScene . URL: https://pro-prof.com/forums/topic/menu-android-scroll Стек виджетов Qt . URL: https://pro-prof.com/forums/topic/screensstack-qt Qt — обработка Android back button . URL: https://pro-prof.com/forums/topic/qt-handling-android-back-button

Добро пожаловать , Гость !

Мы настоятельно рекомендуем Вам зарегистрироваться, если вы ещё этого не сделали. регистрация откроет Вам новые функции.

Войти или Зарегистрироваться

www.silvio-berluskoni.ru © Все права защищены © 2016.
rss