За последние несколько лет в основных инструментальных средствах пользовательского интерфейса произошли некоторые действительно интересные открытия. Игровые интерфейсы тоже развивались, но несколько медленнее. Вероятно, это связано с тем, что разработка полнофункциональной подсистемы пользовательского интерфейса сама по себе является значительным мероприятием, и трудно оправдать инвестиции в ресурсы.
Моя любимая система пользовательского интерфейса - Windows Presentation Foundation (WPF). Это действительно берет потенциал для дифференциации пользовательского интерфейса на следующий уровень. Вот некоторые из его более интересных функций:
По умолчанию элементы управления выглядят как «безликие». Логика и внешний вид элемента управления, как правило, не связаны. Каждый элемент управления поставляется со стилем по умолчанию и шаблоном, который описывает его внешний вид по умолчанию. Например, кнопка может быть представлена в виде скругленного прямоугольника с внешним штрихом, сплошным цветом или градиентным фоном и предъявителем контента (для представления подписи). Разработчики (или дизайнеры) могут создавать собственные шаблоны стилей, которые изменяют внешний вид и (в некоторой степени) поведение элемента управления. Стили можно использовать для переопределения простых свойств элемента управления, таких как цвет переднего плана / фона, шаблон и т. Д .; шаблоны меняют фактическую визуальную структуру.
Стили и шаблоны могут включать «Триггеры». Триггеры могут прослушивать определенные события или значения свойств (или комбинации значений) и условно изменять аспекты стиля или шаблона. Например, шаблон кнопки обычно имеет триггер для свойства «IsMouseOver» для изменения цвета фона при наведении курсора мыши на кнопку.
Существует несколько различных «уровней» элементов пользовательского интерфейса: от легких элементов с минимальной функциональностью до полнофункциональных элементов управления с большим весом. Это дает вам некоторую гибкость в том, как вы структурируете свой интерфейс. Простейший из классов элементов пользовательского интерфейса UIElement
не имеет стиля или шаблона и поддерживает только самые простые входные события. Для простых элементов, таких как индикаторы состояния, эта функциональность может быть всем, что вам нужно. Если вам требуется более обширная поддержка ввода, вы можете извлечь из FrameworkElement
(что расширяется UIElement
). Традиционные виджеты, как правило, являются производными Control
, которые расширяют FrameworkElement
и добавляют пользовательский стиль и поддержку шаблонов (среди прочего).
В WPF используется сохраняемая масштабируемая модель векторной графики, не зависящая от разрешения. В Windows приложения WPF отображаются и создаются с использованием Direct3D.
Внедрение WPF включало новый декларативный язык программирования под названием Xaml. Xaml, основанный на Xml, является предпочтительным языком для объявления «сцен» пользовательского интерфейса. Это на самом деле довольно гладко, и, хотя на первый взгляд может показаться схожим, оно в корне отличается от существующих языков, таких как XUL (и гораздо более мощный).
WPF имеет очень продвинутую текстовую подсистему. Он поддерживает большинство, если не все функции шрифтов OpenType, двунаправленное сглаживание ClearType, позиционирование субпикселей и т. Д.
«Хорошо, отлично, а как это относится к разработке игр?»
В те времена, когда WPF еще находился в разработке (и известен как «Авалон»), я проходил курс дизайна видеоигр в Georgia Tech. Мой последний проект был пошаговой стратегической игрой, и я хотел очень способный пользовательский интерфейс. WPF / Avalon показался мне хорошим маршрутом, потому что он имел полный набор полнофункциональных элементов управления и позволил мне полностью изменить внешний вид этих элементов управления. Результатом стала игра с красивым и четким пользовательским интерфейсом с уровнем функциональности, который вы обычно видите только в полноценных приложениях.
Теперь проблема использования WPF для игр заключается в том, что он довольно тяжелый и рендерится в своей «песочнице». Под этим я подразумеваю, что не существует поддерживаемого способа размещения WPF в игровой среде Direct3D или OpenGL. Можно размещать содержимое Direct3D в приложении WPF, но вы будете ограничены частотой кадров приложения WPF, которая обычно ниже, чем вы хотели бы. Для некоторых типов игр, таких как 2D-стратегии (скриншот моего нынешнего игрового проекта WPF), он все еще может работать отлично. Для всего остального, не так много. Но вы все равно можете применить некоторые из наиболее привлекательных архитектурных концепций WPF при разработке своей собственной инфраструктуры пользовательского интерфейса.
Существует также неуправляемая реализация WPF на C ++ / Direct3D с открытым исходным кодом, называемая «WPF / G (WPF для игр)»] ( http://wpfg.codeplex.com/ ), которая специально разработана для использования в играх на обоих Win32. и Windows Mobile. Активная разработка, похоже, прекратилась, но в последний раз, когда я это проверил, это была довольно полная реализация. Текстовая подсистема была единственной областью, которой действительно не хватало по сравнению с реализацией Microsoft WPF, но это не проблема для игр. Я полагаю, что интеграция WPF / G с игровым движком на основе Direct3D будет относительно простой. Пройдя по этому пути, вы можете получить чрезвычайно функциональную, независимую от разрешения структуру пользовательского интерфейса с расширенной поддержкой настройки пользовательского интерфейса.
Просто, чтобы дать вам представление о том, как может выглядеть пользовательский интерфейс на основе WPF, вот скриншот из моего любимого проекта: