Я создаю свой собственный игровой движок на C ++, и в настоящее время я решаю, какой пользовательский интерфейс мне использовать.
Должен ли я использовать библиотеку? Должен ли я сделать свой собственный?
Я создаю свой собственный игровой движок на C ++, и в настоящее время я решаю, какой пользовательский интерфейс мне использовать.
Должен ли я использовать библиотеку? Должен ли я сделать свой собственный?
Ответы:
Фактически, виджеты Qt могут быть интегрированы с OpenGL, а OpenGL может быть легко интегрирован с Qt (QGLWidget). Конечно, нативно выглядящие платформенные виджеты могут быть не совсем тем, что вы ищете, но не беспокойтесь, есть способы настроить их, создать свой собственный или использовать что-то еще, что лучше соответствует вашим потребностям, например, Qt Quick (который Вы должны быть в состоянии интегрировать также).
Если вам интересно, не пропустите эти ссылки: виджеты входят в третье измерение: WolfenQt и ускоряйте ваши виджеты с помощью OpenGL
Я не думаю, что вы должны писать свои собственные, задача создания игрового движка сама по себе настолько огромна, что если у вас есть много библиотек с хорошими лицензиями, которые вы можете использовать и изменять по своему вкусу.
Для игрового движка я бы выбрал графический интерфейс 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/
Лично я бы порекомендовал CEGUI . Это открытый исходный код и довольно хорошо. Однако вы должны иметь в виду, что это может быть очень, очень многословно, если вы все напишите вручную.
Но, с другой стороны, у него есть средства визуализации как для OpenGL, так и для DirectX. Мне удалось поместить его поверх шаблона, который я обычно использую, который пишет в текстуру напрямую, используя VBO (это довольно хакерски).
Эта игра была для сетевого задания. Задание состояло в том, чтобы иметь сетевую игру с лобби. Я знал, что в лобби возникнет боль в шее, поэтому я выбрал библиотеку, которая сделала большую часть для меня.
Проблема с большинством библиотек GUI (Qt, вероятно, самая популярная C ++, которая не только для Windows) заключается в том, что большинство из них плохо интегрируется в движок. Традиционно в приложении с графическим интерфейсом библиотека GUI контролирует основной цикл, и вы просто подключаете обратные вызовы к событиям. В игровом движке вы, как правило, хотите контролировать цикл, поэтому в лучшем случае он может быть сложным. Может быть, вы ищете что-то, что будет просто обрабатывать элементы управления и диалоговые окна для рисования и тому подобное в трехмерном контексте, который вы передаете? Это может быть намного сложнее найти: - /
Я твердо верю в то, что ты пишешь свое, но опять же, я очень старый человек. Борьба с еще одной библиотекой графического интерфейса для выполнения одной единственной вещи, которую вы хотите, сводит меня с ума, в дополнение к тому факту, что большинство игровых графических интерфейсов довольно тривиальны, так что вам не нужно полностью изучать MDI и дизайн супер OO, где кнопки могут иметь прокрутки, которые подсвечиваются, когда вы зависаете над панелью задач сбоку флажка с перетаскиваемыми большими пальцами - или что-то в этом роде. Я думаю, разные удары для разных людей.
Один из вариантов, который стоит изучить, - использовать WebKit для визуализации ваших пользовательских интерфейсов и весь пользовательский интерфейс с помощью CSS / HTML / Javascript.
Вот реализация с открытым исходным кодом (Berkelium) , и вот закрытый источник, коммерческая реализация (Awesomium)
Я бы предложил IUP - Портативный пользовательский интерфейс: http://www.tecgraf.puc-rio.br/iup/
Я использовал его только с языком программирования Lua, но он был очень прост в использовании. Он поставляется только в вариантах C, LED и Lua, но вы можете легко сделать обертку для него.
Я лично использую CEGUI в своем игровом проекте, и это довольно надежное решение. Проблема в том, что иногда кажется, что нужно хоть немного изменить ваши изменяющиеся тонны файлов.
Я им не пользовался, но libRocket просто вышел совершенно бесплатно, убрав все лицензионные сборы, а что нет. Крутой частью этой библиотеки является то, что вы пишете ее в синтаксисе html / css. http://librocket.com
Просто выдвиньте интересное предложение, если разрабатываете игру для Windows, используйте Win32 API. Просто используйте обычные элементы управления Windows (я бы порекомендовал использовать библиотеки ATL / WTL), но сделайте их владельцем нарисованным.
Я видел эту технику, которая использовалась в первой игре Unreal Tournament, при просмотре опубликованных заголовков (для создателей модов).
Одним из ключевых преимуществ для этого является наличие всей инфраструктуры пользовательского интерфейса Windows, а также сохранение пользовательских предпочтений в отношении скорости повторения клавиатуры, чувствительности мыши, скорости двойного щелчка и других вещей. Также, если вы будете соблюдать правила, интерфейс будет быстрым и без мерцания.
Недостатки заключаются в том, что вам все равно придется написать некоторый код для создания подклассов элементов управления Windows, чтобы их владелец рисовал, чтобы вы могли применять к ним собственную графику и эффекты.
Просто выбросить это как идею.