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?
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?
Respostas:
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
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/
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.
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: - /
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.
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)
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.
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
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.