Конфигурация
IcyConfiguration содержит всё, что нужно IcyUI для работы в вашей игре: как рисовать, откуда приходит ввод, как загружаются ресурсы и шрифты, тему, журнал и то, как масштабируется интерфейс. Каждый элемент создаётся с ней — через Canvas, на который он попадает. Меняют её при настройке IcyUI с помощью построителя.
Настройка
UseIcyUI() строит конфигурацию с настройками движка по умолчанию:
- отрисовка, ввод и загрузка ресурсов для движка;
- поддержка разметки, чтобы
LoadMarkupи конвейер ресурсов читали файлы интерфейса.xml; - встроенная тема;
- системные шрифты, с Segoe UI в качестве семейства по умолчанию;
- поставщик журнала: окно Output отладчика в MonoGame, журнал Stride в Stride.
Чтобы что-то изменить, передайте лямбду. Она выполняется после настроек по умолчанию, поэтому то, что она задаёт, побеждает:
public static StrideIcyHost SetUp(IGame game) => game.UseIcyUI(ui =>
{
ui.ConfigureFonts().WithDefaultFontFamily("Noto Sans"); // instead of Segoe UI
ui.ConfigureLogging(LogLevel.Information); // more than warnings
ui.ConfigureGestures(gestures => gestures.HoldDelay = TimeSpan.FromSeconds(0.8));
});
После настройки конфигурация доступна как Configuration хоста (или через
GetIcyConfiguration() у игры).
Разделы
Построитель группирует настройки в разделы. У каждого есть метод Configure…; большинство также принимают лямбду,
которая получает объект настроек раздела:
| Раздел | Что содержит | Страница |
|---|---|---|
ConfigureTheme |
Тему: словарь ресурсов со стилями и шаблонами. | Ресурсы, стили и темы |
ConfigureFonts |
Системные шрифты, импортированные файлы шрифтов, шрифт по умолчанию и резервный шрифт. | Ресурсы и шрифты |
ConfigureScaling |
Как интерфейс масштабируется вместе с дисплеем. | DPI и масштабирование |
ConfigureLogging |
Куда идут предупреждения IcyUI и с какого уровня. | Журнал и диагностика |
ConfigureGestures |
Задержку удержания, задержку двойного касания и порог перетаскивания. | Ввод, фокус и навигация |
ConfigureAssets |
Откуда загружаются файлы и импортёры для каждого типа ресурсов. | Ресурсы и шрифты |
ConfigureTypes |
Преобразование типов (AddTypeConverter) и поиск типов для разметки. |
Справочник по разметке |
ConfigureMarkup, ConfigureDiagnostics |
Параметры разметки; доступные отладочные инструменты. | Журнал и диагностика |
Некоторые настройки — одиночные значения, которые задаются прямо у построителя, например WithCulture: культура, в
которой локализуются строки, а также показываются и разбираются числа (см. Локализация и
Привязка данных).
Порядок: сначала настройки по умолчанию, ваши изменения последними
Некоторые настройки можно применить только когда конфигурация уже существует: загрузку темы, импорт шрифтов. Построитель хранит их как шаги и выполняет в порядке объявления в конце построения. Поскольку настройки движка объявлены до вашей лямбды, заданные вами тема или семейство шрифтов заменяют настройки по умолчанию, а не перезаписываются ими. Если в лямбде задать одно и то же дважды, останется последнее значение.
Поэтому любую настройку движка по умолчанию можно изменить или отключить из своей лямбды:
| Настройка по умолчанию | Как изменить или отключить |
|---|---|
| Встроенная тема | ConfigureTheme(t => t.Theme = myTheme); пустой ResourceDictionary — чтобы темы не было совсем. |
| Системные шрифты | ConfigureFonts().UseSystemFonts(false) (см. Ресурсы и шрифты). |
| Segoe UI как семейство по умолчанию | ConfigureFonts().WithDefaultFontFamily("My Font"). |
| Поставщик журнала движка | ConfigureLogging().UseLoggerFactory(myFactory) отправляет всё в вашу фабрику. |
| Поддержка разметки, импортёры ресурсов | Отменять нечего: они ничего не стоят, пока не загружен файл их типа. |
IcyUI без настроек движка
Обычный способ — UseIcyUI(). Инструменту или тесту, которым нужна конфигурация без движка, можно построить её
напрямую через IcyConfigurationBuilder с теми же разделами, передав собственную отрисовку и
ввод.
Типичные ошибки
- Вызывайте
UseIcyUI()один раз за игру. Повторный вызов бросает исключение; существующий хост доступен черезGetIcyHost(). - Настраивайте IcyUI в нужный момент. MonoGame: в
Initialize(), доbase.Initialize(). Stride: вStart()стартового скрипта или послеBeginRun()в игре без редактора, когда графический компоновщик сцены уже существует.