Qual biblioteca C ++ GUI você pode sugerir? [fechadas]

26

Estou construindo meu próprio mecanismo de jogo em C ++ e atualmente estou decidindo qual interface de usuário devo usar.

Devo usar uma biblioteca? Devo fazer o meu próprio?

MrValdez
fonte
3
Não está claro o que você quer dizer: GUI no jogo? Ou GUI para ferramentas? Cada um é uma exigência muito diferente ..
jacmoe
11
Quem precisa de ferramentas quando você tem um motor (música épica)
Ricket
11
se você só precisa de diálogos modais, pequenas caixas de diálogo de arquivo no sourceforge são um único arquivo de plataforma cruzada C C ++ a ser adicionado ao seu projeto. No init, não loop principal
tinyfiledialogs

Respostas:

11

De fato, os widgets Qt podem ser integrados ao OpenGL e o OpenGL pode ser facilmente integrado ao Qt (QGLWidget). Obviamente, os widgets com aparência nativa da plataforma podem não ser exatamente o que você está procurando, mas não se preocupe, existem maneiras de personalizá-los, criar seus próprios ou usar outra coisa que melhor atenda às suas necessidades, como o Qt Quick (que você deve ser capaz de integrar também).

Se você estiver interessado, não perca estes links: Os widgets entram na terceira dimensão: WolfenQt e acelere seus widgets com o OpenGL

Palmik
fonte
9

Eu não acho que você deva escrever por si próprio, a tarefa de criar um mecanismo de jogo é tão grande por si só, se você tiver muitas bibliotecas com boas licenças que possa usar e modificar ao seu gosto.

Para um mecanismo de jogo, eu usaria uma GUI de modo imediato. Mais informações aqui: http://www.mollyrocket.com/forums/viewtopic.php?t=134

A ideia principal é desenhar o componente e controlar a interação ao mesmo tempo:

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

Por um lado, o Unity usa um conceito semelhante.

Você pode encontrar uma implementação da NVIDIA, usada em suas demos: http://code.google.com/p/nvidia-widgets/

NocturnDragon
fonte
4
A IM GUI é um conceito interessante, mas descobri que existem alguns problemas que surgem quando você tenta fazer coisas arriscadas. Se você deseja que os elementos de menu sejam animados / invertidos, é necessário modificar a posição individual de todos os widgets ou modificar a matriz de transformação da GUI para essa chamada. Seria mais fácil se você tivesse, por exemplo, um contêiner do Windows cujas ações sejam traduzidas para seus filhos e tal. Além disso, por algum motivo, a maioria das implementações de IMGUI não possui estados de widget "desativados".
Tetrad
@Tetrad: É muito fácil implementar grupos de widgets com layouts automáticos, posições relativas ou posições absolutas (os widgets da Nvidia fazem isso.) Permite que você contenha widgets facilmente dentro de janelas ou painéis. Para o estado "desativado", não vejo por que isso não seria trivialmente implementado. Para "coisas divertidas", acho que os conceitos de modo imediato são realmente mais adequados que o modo retido, já que os widgets são atualizados a cada quadro.
Oskar N.
7

Pessoalmente, eu recomendaria o CEGUI . É de código aberto e muito bom. No entanto, o que você deve ter em mente é que pode ser muito, muito detalhado se você escrever tudo à mão.

Mas, do lado positivo, possui renderizadores para OpenGL e DirectX. Consegui colocá-lo em cima do modelo que normalmente uso, que grava em uma textura diretamente usando um VBO (é meio hacky).

O jogo em questão era para uma tarefa de rede. A tarefa era ter um jogo em rede, com um lobby. Eu sabia que o lobby seria uma dor de garganta, então escolhi uma biblioteca que fazia a maior parte por mim.

knight666
fonte
É isso que estou usando atualmente. Acho que tem muita dependência, no entanto. E I teve problemas ligando-o ao meu projeto (IIRC, a licença disse que eu só posso ligar para a biblioteca)
MrValdez
6
Tem uma quantidade ridícula de dependências. Aumentou meu pequeno jogo de demonstração para 50 MB!
knight666
O que? Eu acho que você está fazendo errado :) O peso das DLLs da CEGUI no meu jogo é inferior a 3 MBs. E para MrValdez: CEGUI está sob a licença BSD ..
jacmoe
Licença MIT - desculpe. CEGUI está sob a licença MIT. :)
jacmoe
5

O problema com a maioria das bibliotecas de GUI (Qt é provavelmente a mais popular em C ++ que não é apenas para Windows) é que a maioria não se integra bem a um mecanismo. Tradicionalmente, em um aplicativo GUI, a biblioteca da GUI controla o loop principal e você apenas conecta retornos de chamada aos eventos. Em um mecanismo de jogo, você geralmente deseja controlar o loop, para que possa ser complicado na melhor das hipóteses. Talvez você esteja procurando algo que lide apenas com controles e diálogos de desenho e assim por diante em um contexto 3D que você transmite? Esses podem ser muito mais difíceis de encontrar: - /

coderanger
fonte
<pedante> wxWidgets também é multi-plataforma </ pedante> embora eu tomar o seu ponto sobre a integração do motor
zebrabox
3
Eu disse "mais popular", não "apenas" :-P wx tem ainda menos suporte para trabalhar com contextos 3D da última vez que olhei.
Coderanger
4

Eu acredito fortemente em escrever o seu próprio, mas, novamente, eu sou muito velho. Lutar com mais uma lib de GUI para fazer exatamente isso que você quer tende a me deixar maluco, adicionado ao fato de que a maioria das GUIs de jogos é bastante trivial, para que você não precise se esforçar ao máximo no design de MDI e super OO, onde os botões podem ter visualizações de rolagem que são destacadas quando você passa o mouse sobre uma barra de tarefas ao lado de uma caixa de seleção com polegares arrastáveis ​​- ou algo assim. Cursos diferentes para pessoas diferentes, eu acho.

Kaj
fonte
há situações em que "escreva o seu próprio" não é tão deslocado quanto se poderia pensar. Um jogo em que a interface do usuário é importante, como jogos de gerenciamento ou RPGs com gerenciamento de itens complexos; a interface do usuário seria uma grande parte da experiência. joelonsoftware.com/articles/fog0000000007.html Se é uma função core business - fazê-lo sozinho, não importa o que
v.oddou
3

Uma opção que pode valer a pena investigar é usar o WebKit para renderizar suas interfaces de usuário e fazer toda a sua interface do usuário com CSS / HTML / Javascript.

Aqui está uma implementação de código aberto (Berkelium) e aqui está uma implementação comercial de código fechado (Awesomium)

Tetrad
fonte
5
O WebKit e seus parentes são mais voltados para uma taxa de atualização de uma ou duas vezes por segundo, pode ser complicado fazer um HUD para um jogo orientado a ação dessa maneira. Seria ótimo para menus ou bits mais lentos embora.
Coderanger
11
@ cododeranger: você pode escrever jogos inteiros em JavaScript / HTML5. Publiquei um jogo de ação comercial para a Chrome Web Store que roda a 60 FPS no WebKit / Chrome.
21711 Sean Middleditch
3

Sugiro IUP - Interface de usuário portátil: http://www.tecgraf.puc-rio.br/iup/

Eu usei apenas com a linguagem de programação Lua, mas era muito fácil de usar. Ele só vem nos sabores C, LED e Lua, mas você pode criar um invólucro facilmente.

Dalin Seivewright
fonte
Parece interessante. Vou dar uma olhada assim que puder.
MrValdez
3

Pessoalmente, estou usando o CEGUI no meu projeto de jogo e é uma solução bastante robusta. O problema é que, às vezes, quase parece fazer uma pequena alteração na alteração de toneladas de arquivos.

Eu não o usei, mas o libRocket ficou completamente gratuito, removendo todas as taxas de licença e o que não. A parte legal dessa lib é que você a escreve na sintaxe html / css. http://librocket.com

Aidan Knight
fonte
2

Apenas levante uma sugestão interessante, se estiver desenvolvendo o jogo para Windows, use a API do Win32. Basta usar os controles normais do Windows (eu recomendaria usar as bibliotecas ATL / WTL), mas torná-los proprietários.

Eu vi essa técnica sendo usada no primeiro jogo do Unreal Tournament, enquanto olhava os cabeçalhos divulgados publicamente (para fabricantes de mods).

Um dos principais benefícios de fazer isso é ter toda a infraestrutura da interface do usuário do Windows à sua disposição, além de manter as preferências do usuário quanto à taxa de repetição do teclado, sensibilidade do mouse, velocidade do clique duplo e outras coisas. Além disso, se você obedecer às regras, a interface será rápida e sem oscilações.

As desvantagens são que você ainda precisará escrever um código para subclassificar os controles do Windows para torná-los proprietários, para que você possa aplicar seus próprios gráficos e efeitos a eles.

Apenas jogando isso fora como uma idéia.

Daemin
fonte
11
Acredito Win32 / COM é emulado no Vista e Win 7. Não recomendado para alto desempenho ...
Stephen Furlani
Eu acho que depende de quanto da GUI você usará no jogo. Se for apenas para o sistema de menus, então quem realmente se importa, se você o estiver usando extensivamente na seção crucial da taxa de quadros, ele precisará de algum trabalho e reflexão.
Daemin 10/11/10
O @StephenFurlani Win32 / COM não é emulado no Vista e no Windows 7, é nativo e tem velocidade total. Além disso, o ATL / WTL não depende do COM, mas o DirectX.
Daemin