Ha habido algunos avances realmente interesantes en los kits de herramientas de interfaz de usuario principales en los últimos años. Las IU del juego también han evolucionado, pero a un ritmo algo más lento. Esto es probable porque desarrollar un subsistema de interfaz de usuario con todas las funciones es una tarea importante en sí misma, y es difícil justificar la inversión de recursos.
Mi sistema de IU favorito personal es Windows Presentation Foundation (WPF). Realmente lleva el potencial de diferenciación de UI al siguiente nivel. Estas son algunas de sus características más interesantes:
Los controles son "sin aspecto" por defecto. La lógica y la apariencia visual de un control generalmente están desacopladas. Cada control se envía con un estilo y una plantilla predeterminados, que describen su apariencia visual predeterminada. Por ejemplo, un botón puede representarse como un rectángulo redondeado con un trazo externo, un color sólido o un fondo degradado y un presentador de contenido (para presentar el título). Los desarrolladores (o diseñadores) pueden crear plantillas de estilos personalizados que cambian la apariencia y (hasta cierto punto) el comportamiento de un control. Los estilos se pueden usar para anular las propiedades simples de un control, como el color de primer plano / fondo, la plantilla, etc. Las plantillas cambian la estructura visual real.
Los estilos y las plantillas pueden incluir "Disparadores". Los disparadores pueden escuchar ciertos eventos o valores de propiedad (o combinaciones de valores) y alterar condicionalmente aspectos de un estilo o plantilla. Por ejemplo, una plantilla de botón generalmente tendría un activador en la propiedad "IsMouseOver" con el propósito de cambiar el color de fondo cuando el mouse pasa sobre el botón.
Hay algunos "niveles" diferentes de elementos de interfaz de usuario que van desde elementos más livianos con una funcionalidad mínima hasta controles completos de peso pesado. Esto le brinda cierta flexibilidad en la forma en que estructura su IU. La más simple de las clases de elementos de la interfaz de usuario UIElement
, no tiene estilo ni plantilla y solo admite los eventos de entrada más simples. Para elementos simples como indicadores de estado, esta funcionalidad podría ser todo lo que necesita. Si necesita un soporte de entrada más extenso, puede derivar de FrameworkElement
(que se extiende UIElement
). Los widgets tradicionales generalmente se derivan Control
, lo que extiende FrameworkElement
y agrega estilo personalizado y soporte de plantillas (entre otras cosas).
WPF utiliza un modelo de gráficos vectoriales retenido, escalable e independiente de la resolución. En Windows, las aplicaciones WPF se representan y componen utilizando Direct3D.
La introducción de WPF incluyó un nuevo lenguaje de programación declarativo llamado Xaml. Xaml, basado en Xml, es el lenguaje preferido para declarar "escenas" de IU. En realidad, es bastante hábil, y aunque puede parecer similar a primera vista, es fundamentalmente diferente de los lenguajes existentes como XUL (y mucho más potente).
WPF tiene un subsistema de texto muy avanzado. Admite la mayoría de las funciones de fuente OpenType, si no todas, el antialiasing bidireccional ClearType, el posicionamiento de subpíxeles, etc.
"Muy bien, ahora, ¿cómo es esto relevante para el desarrollo del juego?"
Cuando WPF todavía estaba en desarrollo (y conocido como "Avalon"), estaba tomando un curso de diseño de videojuegos en Georgia Tech. Mi proyecto final fue un juego de estrategia por turnos, y quería una interfaz de usuario muy capaz. WPF / Avalon parecía una buena ruta a seguir porque tenía un conjunto completo de controles con todas las funciones y me permitía cambiar por completo la apariencia de esos controles. El resultado fue un juego con una interfaz de usuario hermosa y nítida con el nivel de funcionalidad que normalmente solo se ve en aplicaciones completas.
Ahora, el problema con el uso de WPF para juegos es que es bastante pesado y se presenta en su propio "sandbox". Con eso quiero decir que no hay una forma compatible de alojar WPF dentro de un entorno de juego Direct3D u OpenGL. Es posible alojar contenido Direct3D dentro de una aplicación WPF, pero estará limitado por la velocidad de fotogramas de la aplicación WPF, que generalmente es más baja de lo que desearía. Para algunos tipos de juegos, como los juegos de estrategia 2D (captura de pantalla de mi proyecto de juego WPF actual), aún podría funcionar muy bien. Para cualquier otra cosa, no tanto. Pero aún podría aplicar algunos de los conceptos arquitectónicos más convincentes de WPF al desarrollar su propio marco de interfaz de usuario.
También hay una implementación de código abierto, C ++ / Direct3D de WPF llamada "WPF / G (WPF for Games)"] ( http://wpfg.codeplex.com/ ) que está específicamente diseñada para su uso en juegos en Win32 y Windows Mobile. El desarrollo activo parece haber cesado, pero la última vez que lo revisé, fue una implementación bastante completa. El subsistema de texto era el área que realmente faltaba en comparación con la implementación WPF de Microsoft, pero eso no es un problema para los juegos. Me imagino que integrar WPF / G con un motor de juego basado en Direct3D sería relativamente sencillo. Seguir esta ruta podría proporcionarle un marco de interfaz de usuario extremadamente capaz e independiente de la resolución con un amplio soporte para la personalización de la interfaz de usuario.
Solo para darte una idea de cómo podría ser una interfaz de usuario de juego basada en WPF, aquí hay una captura de pantalla de mi proyecto favorito: