Какую библиотеку C ++ GUI вы можете предложить? [закрыто]


26

Я создаю свой собственный игровой движок на C ++, и в настоящее время я решаю, какой пользовательский интерфейс мне использовать.

Должен ли я использовать библиотеку? Должен ли я сделать свой собственный?


3
Непонятно, что вы имеете в виду: внутриигровой графический интерфейс? Или графический интерфейс для инструментов? Каждое из них является совершенно другим требованием ..
Жакмо

1
Кому нужны инструменты, когда у вас есть ДВИГАТЕЛЬ (эпическая музыка)
Ricket

1
если вам просто нужны модальные диалоги, крошечные файловые диалоги на sourceforge - это единственный кроссплатформенный файл C C ++, который можно добавить в ваш проект. нет инициализации, нет основного цикла
tinyfiledialogs

Ответы:


11

Фактически, виджеты Qt могут быть интегрированы с OpenGL, а OpenGL может быть легко интегрирован с Qt (QGLWidget). Конечно, нативно выглядящие платформенные виджеты могут быть не совсем тем, что вы ищете, но не беспокойтесь, есть способы настроить их, создать свой собственный или использовать что-то еще, что лучше соответствует вашим потребностям, например, Qt Quick (который Вы должны быть в состоянии интегрировать также).

Если вам интересно, не пропустите эти ссылки: виджеты входят в третье измерение: WolfenQt и ускоряйте ваши виджеты с помощью OpenGL


9

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

Для игрового движка я бы выбрал графический интерфейс Immediate. Больше информации здесь: http://www.mollyrocket.com/forums/viewtopic.php?t=134

Основная идея состоит в том, чтобы нарисовать компонент и одновременно контролировать взаимодействие:

if (button(id, position, size)) 
{
    button_was_pressed();
}

Например, Unity использует похожую концепцию.

Вы можете найти реализацию NVIDIA, использованную в их демонстрациях: http://code.google.com/p/nvidia-widgets/


4
IM GUI - интересная концепция, но я обнаружил, что есть некоторые проблемы, которые возникают, когда вы пытаетесь сделать что-то интересное. Если вы хотите, чтобы элементы меню анимировали вход / выход, вы должны сделать что-то вроде изменения индивидуальной позиции всех виджетов или сделать что-то вроде изменения матрицы преобразования GUI для этого вызова. Было бы проще, если бы у вас был, например, контейнер Window, чьи действия транслируются вплоть до его потомков и тому подобное. Кроме того, по некоторым причинам в большинстве реализаций IMGUI отсутствуют «отключенные» состояния виджетов.
Тетрад

@Tetrad: очень легко реализовать группы виджетов с автоматическими макетами, относительными позициями или абсолютными позициями (это делают виджеты Nvidia). Это позволяет очень легко содержать виджеты внутри окон или панелей. Что касается «отключенного» состояния, я не понимаю, почему это не будет реализовано тривиально. Для «игровых вещей», я думаю, концепции непосредственного режима на самом деле больше подходят, чем режим удержания, поскольку виджеты обновляются каждый кадр.
Оскар Н.

7

Лично я бы порекомендовал CEGUI . Это открытый исходный код и довольно хорошо. Однако вы должны иметь в виду, что это может быть очень, очень многословно, если вы все напишите вручную.

Но, с другой стороны, у него есть средства визуализации как для OpenGL, так и для DirectX. Мне удалось поместить его поверх шаблона, который я обычно использую, который пишет в текстуру напрямую, используя VBO (это довольно хакерски).

Эта игра была для сетевого задания. Задание состояло в том, чтобы иметь сетевую игру с лобби. Я знал, что в лобби возникнет боль в шее, поэтому я выбрал библиотеку, которая сделала большую часть для меня.


Это то, что я сейчас использую. Я считаю, что у него слишком много зависимости, хотя. И у меня были проблемы с привязкой его к моему проекту (IIRC, в лицензии сказано, что я могу только ссылаться на библиотеку)
MrValdez

6
У него смехотворное количество зависимостей. Это раздуло мою крошечную демонстрационную игру до 50 МБ!
knight666

Какая? Я думаю, что вы делаете это неправильно :) Вес DLL CEGUI в моей игре составляет менее 3 МБ. И мистеру Вальдесу: CEGUI находится под лицензией BSD ..
Jacmoe

Лицензия MIT - извините. CEGUI находится под лицензией MIT. :)
Жакмо

5

Проблема с большинством библиотек GUI (Qt, вероятно, самая популярная C ++, которая не только для Windows) заключается в том, что большинство из них плохо интегрируется в движок. Традиционно в приложении с графическим интерфейсом библиотека GUI контролирует основной цикл, и вы просто подключаете обратные вызовы к событиям. В игровом движке вы, как правило, хотите контролировать цикл, поэтому в лучшем случае он может быть сложным. Может быть, вы ищете что-то, что будет просто обрабатывать элементы управления и диалоговые окна для рисования и тому подобное в трехмерном контексте, который вы передаете? Это может быть намного сложнее найти: - /


<pedantic> wxWidgets также является кроссплатформенным </ pedantic>, хотя я понимаю вашу точку зрения по поводу интеграции с движком
zebrabox

3
Я сказал «самый популярный», а не «только»: - P wx еще меньше поддерживает работу с 3D-контекстами, которые я смотрел в последний раз.
Coderanger

4

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


бывают ситуации, когда «написать свое» не так уж неуместно, как можно подумать. Игра, в которой важен пользовательский интерфейс, например, игры для управления или RPG со сложными элементами управления; пользовательский интерфейс будет огромной частью опыта. joelonsoftware.com/articles/fog0000000007.html Если это основная бизнес-функция - делай это сам, несмотря ни на что
v.oddou

3

Один из вариантов, который стоит изучить, - использовать WebKit для визуализации ваших пользовательских интерфейсов и весь пользовательский интерфейс с помощью CSS / HTML / Javascript.

Вот реализация с открытым исходным кодом (Berkelium) , и вот закрытый источник, коммерческая реализация (Awesomium)


5
WebKit и его родственники более приспособлены к частоте обновления один или два раза в секунду, может быть сложно сделать HUD для игры, ориентированной на действие, таким образом. Было бы здорово для меню или медленных битов, хотя.
кодеренджер

1
@coderanger: Вы можете писать целые игры на JavaScript / HTML5. Я опубликовал коммерческую экшн-игру для Chrome Web Store, которая прекрасно работает на скорости 60 FPS в WebKit / Chrome.
Шон Мидлдич

3

Я бы предложил IUP - Портативный пользовательский интерфейс: http://www.tecgraf.puc-rio.br/iup/

Я использовал его только с языком программирования Lua, но он был очень прост в использовании. Он поставляется только в вариантах C, LED и Lua, но вы можете легко сделать обертку для него.


Выглядит интересно. Я проверю это, как только смогу.
MrValdez

3

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

Я им не пользовался, но libRocket просто вышел совершенно бесплатно, убрав все лицензионные сборы, а что нет. Крутой частью этой библиотеки является то, что вы пишете ее в синтаксисе html / css. http://librocket.com


2

Просто выдвиньте интересное предложение, если разрабатываете игру для Windows, используйте Win32 API. Просто используйте обычные элементы управления Windows (я бы порекомендовал использовать библиотеки ATL / WTL), но сделайте их владельцем нарисованным.

Я видел эту технику, которая использовалась в первой игре Unreal Tournament, при просмотре опубликованных заголовков (для создателей модов).

Одним из ключевых преимуществ для этого является наличие всей инфраструктуры пользовательского интерфейса Windows, а также сохранение пользовательских предпочтений в отношении скорости повторения клавиатуры, чувствительности мыши, скорости двойного щелчка и других вещей. Также, если вы будете соблюдать правила, интерфейс будет быстрым и без мерцания.

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

Просто выбросить это как идею.


1
Я считаю, что win32 / COM эмулируется в Vista и Win 7. Не рекомендуется для высокой производительности ...
Стивен Фурлани

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

@StephenFurlani Win32 / COM не эмулируется в Vista и Windows 7, он является родным и работает на полной скорости. Кроме того, ATL / WTL не зависит от COM, но DirectX делает.
Daemin
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.