2012-06-04 7 views
6

Как хобби, я работал над переделкой старой видеоигры, и я хочу избежать возможности изобретать колесо там, где это возможно. Игра в значительной степени основана на графическом интерфейсе, но графический интерфейс должен быть настроен с точки зрения внешнего вида, а также должен работать с 3D-рендерингом OpenGL для нескольких игровых экранов.Qt библиотека для разработки 2D/3D игр

Чтобы дать вам идею, вот скриншот от первоначального прототипа:

enter image description here

Там много анимации используется, и 3D также, но GUI виджеты ведут себя так же, как в стандартном настольного приложения.

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

Я рассматриваю возможность перехода на Qt с учетом его репутации и впечатляющих функций, а также некоторых хороших скриншотов на веб-сайте Qt. Но я никогда раньше не использовал Qt, поэтому у меня нет понятия о том, на что он способен, или о том, какое время потребуются для изучения. (Примечание. Я использовал FLTK).

Мой вопрос: было бы возможно/практично использовать Qt в этой ситуации?

UPDATE: После издевательства над некоторыми игровыми экранами в Qt я решил не использовать его. Хотя он поддерживает многие функции, которые мне нужны из коробки (особенно через таблицы стилей), мне нужно поддерживать настраиваемые предварительно обработанные шрифты на основе растровых изображений (я не могу их преобразовать или заменить). И я не могу подклассировать QFont или переопределить его без его взлома в будущих выпусках Qt. Тем не менее, я был очень впечатлен Qt (как в простоте использования, так и в хорошей документации). Я буду заимствовать некоторые его функции для своего собственного движка. Спасибо всем, кто внес вклад.

+1

Простой ответ: да, его возможно/практично использовать Qt в этой ситуации. Чтобы получить более эффективный ответ, вы можете рассмотреть вопрос о более подробном вопросе или перечислить некоторые сомнения, которые могут возникнуть в Qt. – Brady

+1

Взгляните на архитектуру 'QGraphicsView' /' QGraphicsScene', она должна быть близка к тому, что вам нужно. – cmannett85

+0

Спасибо, ребята. Ну, я никогда не использовал Qt, поэтому моя главная задача - потратить много времени на изучение этого, чтобы найти, что он не может делать то, в чем я нуждаюсь. Класс QGraphicsView, похоже, поддерживает некоторые функции, которые мне нужны. Другой пример, который мне нужен, - это не прямоугольные кнопки, например. с наклонными краями (мой существующий код использует маску изображения для принятия/отклонения событий мыши). Будет ли Qt легко разрешать такие подвиги? – QuasarDonkey

ответ

4

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

Во-первых, вы можете рассмотреть QtQuick над GraphicsView Framework, но это ДЕЙСТВИТЕЛЬНО зависит от того, что вам нужно сделать. Я просто хочу выбросить его в качестве альтернативы, чтобы вы не пропустили его. Этот tutorial использует QtQuick, чтобы собрать действительно гладкую перспективу, соединяющую четыре стиля игры. Это может быть более упрощенным, чем то, что вы хотите использовать, но опять же, возможно, это не так, это зависит от того, что вам нужно делать.

Во-вторых, перед написанием пользовательских событий рисования для всех ваших кнопок я бы рассмотрел использование Qt Style Sheets и стиль ваших виджетов в синтаксисе CSS. Это позволит вам очень быстро и легко изменить внешний вид вашего графического интерфейса. Основываясь на вашем скриншоте, я думаю, что вы можете получить то, что вы хотите, из таблиц стилей намного быстрее, чем подклассы и катить собственную настройку. Но еще раз, это трудно понять, основываясь на одном снимке экрана.Here - пример темного и оранжевого графического интерфейса, который был реализован с использованием только таблиц стилей Qt. Свойство border-radius таблицы стилей QPushButton даст вам закругленные кнопки (ref).

+0

Да, я уже наткнулся на таблицы стилей. Свойство «border-image», похоже, обеспечивает большую часть функциональности темы, в которой я нуждаюсь, поскольку в основном я использую предварительно обработанные изображения для всего (надеюсь, это тоже может сделать анимацию?). Это будет особенно полезно, так как игра поддерживает несколько воспроизводимых империй, каждый из которых имеет другой внешний вид. Что касается закругленных кнопок, изображения уже круглые, я просто хочу ограничить щелчки мыши в этой области. QWidget :: setMask() сделает это. Я проверю QtQuick. – QuasarDonkey

+0

Да, но с таблицами стилей кажется, что вам не нужны * изображения для ваших кнопок, я прав? Вы можете написать стиль, а затем изменения/модификации пользовательского интерфейса (по крайней мере, с точки зрения кнопок) намного проще. Опять же, я не знаю вашего рабочего процесса, так что делайте все, что вам подходит. Если вам интересно об использовании свойств анимации (a la CSS), я не думаю, что вы получите это с помощью Qt Style Sheets. Насколько мне известно, для получения хорошей анимации вам понадобится использовать Graphics View Framework или Animation Framework (и/или некоторую комбинацию обоих). Удачи! –

1

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

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

+0

Да, я думал об этом. Из того, что я видел в API, будет довольно легко подклассифицировать виджеты, чтобы получить точный внешний вид, который я хочу, например. путем переопределения QButton :: drawButton() и т.п. – QuasarDonkey

Смежные вопросы