[#] QtQuick/QML в качестве игрового UI
habrabot(difrex,1) — All
2016-06-21 11:30:03


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

Выходом является использование готовых универсальных UI библиотек. Текущее их поколение представлено такими «монстрами» как [Scaleform][1] и [Coherent UI][2], хотя если вам так хочется писать UI на HTML, то можно и просто взять [Awesomium][3].

К сожалению, у этой троицы, при всех её преимуществах, есть один существенный недостаток — жуткие тормоза, особенно на мобильных устройствах (несколько лет назад, я лично наблюдал, как практически пустой экран на Scaleform потреблял 50% от времени кадра на iPhone4).

На этом фоне, мне всегда было интересно, почему никто не использует в играх [Qt][4] — библиотеку, неплохо зарекомендовавшую себя в десктопных приложениях. На самом деле, это утверждение не совсем верно — в Wiki проекта Qt есть [список][5] игр, однако в нём почти нет современных профессиональных проектов.

Впрочем, причина, по которой именно привычные старые [Qt Widgets][6] не используются в играх, лежит на поверхности: они не рассчитаны на использование совместно с OpenGL или DirectX рендером. Попытки их скрестить дают довольно плохую производительность [даже на десктопе][7], а про мобилки и говорить нечего.

Однако, уже довольно давно в Qt есть гораздо более подходящая для этой задачи библиотека: [QtQuick][8]. Её контролы по умолчанию рендерятся ускоренно, а возможность задавать описание UI в текстовом формате отлично подходит для быстрой настройки и изменения внешнего вида игры.

Тем не менее, я до сих пор не слышал об использовании Qt в профессиональном геймдеве. Статей на тему тоже не нашлось, поэтому я решил разобраться сам — то ли все что-то знают, чего не знаю я (но не рассказывают!), то ли просто не видят хорошую возможность сэкономить на времени разработки.
[Читать дальше →][9]

[1]: http://www.autodesk.com/products/scaleform/overview
[2]: http://coherent-labs.com/
[3]: http://www.awesomium.com/
[4]: http://www.qt.io/developers/
[5]: https://wiki.qt.io/Qt_Based_Games
[6]: http://doc.qt.io/qt-5/qtwidgets-index.html
[7]: http://www.shamusyoung.com/twentysidedtale/?p=15904
[8]: http://doc.qt.io/qt-5/qtquick-index.html
[9]: https://habrahabr.ru/post/303722/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut