Houve alguns avanços realmente interessantes nos kits de ferramentas de interface do usuário convencionais nos últimos anos. As interfaces de jogo também estão evoluindo, mas em um ritmo um pouco mais lento. Isso é provável porque o desenvolvimento de um subsistema de interface do usuário com todos os recursos é uma tarefa significativa por si só e é difícil justificar o investimento em recursos.
Meu sistema de interface do usuário favorito é o Windows Presentation Foundation (WPF). Realmente leva o potencial de diferenciação da interface do usuário para o próximo nível. Aqui estão algumas de suas características mais interessantes:
Os controles são "sem aparência" por padrão. A lógica e a aparência visual de um controle geralmente são dissociadas. Todo controle é fornecido com um estilo e modelo padrão, que descreve sua aparência visual padrão. Por exemplo, um botão pode ser representado como um retângulo arredondado com um traço externo, uma cor sólida ou um fundo gradiente e um apresentador de conteúdo (para apresentar a legenda). Os desenvolvedores (ou designers) podem criar modelos de estilos personalizados que alteram a aparência e (em certa medida) o comportamento de um controle. Os estilos podem ser usados para substituir propriedades simples de um controle, como cor de primeiro plano / plano de fundo, modelo etc. modelos alteram a estrutura visual real.
Estilos e modelos podem incluir "Disparadores". Os gatilhos podem ouvir determinados eventos ou valores de propriedade (ou combinações de valores) e alterar condicionalmente aspectos de um estilo ou modelo. Por exemplo, um modelo de botão geralmente teria um gatilho na propriedade "IsMouseOver" com a finalidade de alterar a cor do plano de fundo quando o mouse passar o mouse sobre o botão.
Existem alguns "níveis" diferentes de elementos da interface do usuário, que variam de elementos de peso mais leve com funcionalidade mínima a controles de peso pesado completos. Isso permite flexibilidade na estrutura da interface do usuário. A mais simples das classes de elementos da interface do usuário,, UIElement
não possui estilo ou modelo e suporta apenas o mais simples dos eventos de entrada. Para elementos simples, como indicadores de status, essa funcionalidade pode ser tudo o que você precisa. Se você precisar de suporte de entrada mais extenso, poderá derivar de FrameworkElement
(que se estende UIElement
). Os widgets tradicionais geralmente derivam Control
, o que estende FrameworkElement
e adiciona estilo personalizado e suporte a modelos (entre outras coisas).
O WPF usa um modelo de gráficos vetoriais retido, escalável e independente de resolução. No Windows, os aplicativos WPF são renderizados e compostos usando o Direct3D.
A introdução do WPF incluiu uma nova linguagem de programação declarativa chamada Xaml. Xaml, baseado em Xml, é o idioma preferido para declarar "cenas" da interface do usuário. Na verdade, é bastante liso e, embora possa parecer semelhante à primeira vista, é fundamentalmente diferente dos idiomas existentes como o XUL (e muito mais poderoso).
O WPF possui um subsistema de texto muito avançado. Ele suporta quase todos os recursos de fonte OpenType, antialiasing bidirecional ClearType, posicionamento de subpixel, etc.
"Ok, ótimo, agora, como isso é relevante para o desenvolvimento de jogos?"
Quando o WPF ainda estava em desenvolvimento (e conhecido como "Avalon"), eu estava fazendo um curso de design de videogames na Georgia Tech. Meu projeto final foi um jogo de estratégia baseado em turnos e eu queria uma interface do usuário muito capaz. O WPF / Avalon parecia um bom caminho a percorrer, porque tinha um conjunto completo de controles completos e me permitia alterar completamente a aparência e o controle desses controles. O resultado foi um jogo com uma interface de usuário bonita e nítida, com o nível de funcionalidade que você normalmente só vê em aplicativos completos.
Agora, o problema com o uso do WPF para jogos é que ele é bastante pesado e é renderizado em sua própria "caixa de areia". Com isso, quero dizer que não há maneira suportada de hospedar o WPF em um ambiente de jogo Direct3D ou OpenGL. É possível hospedar o conteúdo do Direct3D em um aplicativo WPF, mas você ficará limitado pela taxa de quadros do aplicativo WPF, que geralmente é menor do que o desejado. Para alguns tipos de jogos, como jogos de estratégia 2D (captura de tela do meu projeto de jogo atual do WPF), ainda pode funcionar muito bem. Para qualquer outra coisa, nem tanto. Mas você ainda pode aplicar alguns dos conceitos arquiteturais mais atraentes do WPF no desenvolvimento de sua própria estrutura de interface do usuário.
Há também uma implementação de código aberto do C ++ / Direct3D não gerenciada do WPF chamada "WPF / G (WPF para jogos)"]] ( http://wpfg.codeplex.com/ ) projetada especificamente para uso em jogos no Win32 e Windows Mobile. O desenvolvimento ativo parece ter cessado, mas a última vez que fiz o check-out, foi uma implementação bastante completa. O subsistema de texto era a única área que realmente faltava em comparação com a implementação WPF da Microsoft, mas isso é menos problemático para jogos. Eu imaginaria que integrar o WPF / G a um mecanismo de jogo baseado no Direct3D seria relativamente simples. Seguir essa rota pode fornecer uma estrutura de interface do usuário extremamente capaz e independente de resolução, com amplo suporte à personalização da interface do usuário.
Apenas para lhe dar uma ideia de como seria uma interface de jogo baseada em WPF, aqui está uma captura de tela do meu projeto de estimação: