Журнал и диагностика
Когда что-то работает не так, как сказано в разметке, IcyUI сообщает об этом двумя способами: предупреждениями в журнале — о проблемах, которые можно назвать (несуществующий шрифт, опечатка в пути привязки), — и отладочными инструментами поверх работающей игры — для проблем, которые нужно увидеть (элемент не того размера, фокус не там).
Журнал
IcyUI пишет журнал через Microsoft.Extensions.Logging — стандартные интерфейсы журналирования .NET. С настройками
движка по умолчанию сообщения попадают в окно Output отладчика в MonoGame и в журнал Stride (игровую консоль и вывод
Game Studio) в Stride. По умолчанию записываются только предупреждения и более серьёзные сообщения.
| Событие | Уровень | Значение |
|---|---|---|
| 1001 | Warning | Для семейства не загружено ни одного шрифта, поэтому текст с ним использует резервный. |
| 1002 | Warning | Не удалось импортировать системный шрифт. |
| 1003 | Debug | Файл в папке системных шрифтов не читается как шрифт и пропущен. |
| 1004 | Warning | Нет шрифта по умолчанию для текста без FontFamily. |
| 2001 | Warning | Путь привязки называет член, которого нет у источника. |
| 2002 | Warning | Контекст данных привязки не соответствует её x:DataType; она переходит на динамический путь. |
| 3001 | Warning | Сборку не удалось полностью просмотреть в поисках типов для разметки. |
| 4001 | Warning | Для ключа и языка нет локализованной строки; показывается сам ключ. |
| 4002 | Warning | Файл локализации не читается; он пропускается, как будто его нет. |
Каждое сообщение записывается один раз на причину, а не каждый кадр.
Куда направить журнал
Раздел журнала в конфигурации принимает минимальный уровень, дополнительных поставщиков или целиком вашу фабрику журналов:
// Sends IcyUI's messages to your own logging (Serilog, the console, ...) through any ILoggerProvider.
public static StrideIcyHost SetUpWithLogging(IGame game, ILoggerProvider provider) =>
game.UseIcyUI(ui => ui.ConfigureLogging().AddLoggerProvider(provider));
ConfigureLogging(LogLevel.Information)понижает порог (см. Конфигурация);AddLoggerProvider(provider)добавляет любойILoggerProvider: Serilog, NLog, консоль или свой;UseLoggerFactory(factory)передаёт IcyUI уже существующую в игреILoggerFactory, чтобы его сообщения попадали в ваш журнал с вашими фильтрами.
Отладочные инструменты
Canvas может рисовать поверх интерфейса отладочные инструменты. Они включаются по имени в ActiveDebugTools:
| Инструмент | Показывает |
|---|---|
"Bounds" |
Границы внешнего отступа, рамки, внутреннего отступа и содержимого каждого элемента. |
"Focus" |
Контур вокруг элемента в фокусе. |
"DiagnosticsHud" |
Панель со временем кадра и FPS, памятью и элементом в фокусе. |
IcyUI не назначает им клавиш; назначьте свои, например в отладочной сборке:
// F1 toggles the layout boxes, F2 the diagnostics panel (frame time, memory, focused element).
public static void BindDebugKeys(IIcyHost ui)
{
void Toggle(string tool)
{
if (!ui.MainCanvas.ActiveDebugTools.Remove(tool))
ui.MainCanvas.ActiveDebugTools.Add(tool);
}
ui.Configuration.Input.Events.RegisterCommand(new RelayCommand(() => Toggle("Bounds")), new KeyGesture(Keys.F1));
ui.Configuration.Input.Events.RegisterCommand(new RelayCommand(() => Toggle("DiagnosticsHud")), new KeyGesture(Keys.F2));
}
Типичные ошибки
- В MonoGame без отладчика журнала нет. Поставщик по умолчанию пишет только при подключённом отладчике; добавьте своего поставщика, чтобы журнал вёлся и при обычном запуске игры.
- Для работающей привязки ничего не записывается. Предупреждение 2001 появляется, только если члена не существует;
привязка к свойству, которое никогда не вызывает
PropertyChanged, молчит. См. Привязка данных.
См. также
- Ресурсы и шрифты — предупреждения о шрифтах.
- Привязка данных — предупреждения о привязках.