Одно из самых очевидных преимуществ устройств ChromeOS — это их большие, красивые экраны и простота использования внешних мониторов. Большое экранное пространство открывает огромный потенциал для игр, но для эффективного его использования может потребоваться дополнительная проработка и дизайн.
Изменения ориентации и конфигурации
Некоторые мобильные приложения специально разработаны для небольших телефонов и имеют фиксированную портретную ориентацию. Это, казалось бы, обеспечивает быстрые и эффективные результаты за счет уменьшения количества изменений конфигурации игры и сокращения числа необходимых различных раскладок. Однако такой подход может таить в себе и некоторые скрытые сюрпризы: не обрабатывая изменения ориентации, многие приложения окажутся не готовы к другим изменениям конфигурации, таким как изменение размера окна, подключение клавиатуры, внешние дисплеи и т. д. Это может привести к неожиданным сбоям и перезапускам (подробнее см. раздел «Изменения во время выполнения» ). Хотя эти изменения происходят и на мобильных устройствах, на складных устройствах и устройствах ChromeOS они случаются часто и должны обрабатываться корректно.
Кроме того, на устройствах с большими экранами альбомной ориентации или складных устройствах с квадратным соотношением сторон игры с фиксированной портретной ориентацией будут отображаться с большими черными полосами по бокам.
В некоторых играх, ориентированных в первую очередь на мобильные телефоны, может быть предусмотрена блокировка приложения в альбомном режиме. Пользователям планшетов или трансформеров придется держать устройство в альбомной ориентации, что может показаться более неудобным, чем на телефоне, и ухудшить игровой процесс. Для планшетов и трансформеров с большими экранами в портретном режиме может быть достаточно места. Для некоторых людей держать устройство в таком положении может быть удобнее, позволяя им взаимодействовать с игрой в течение более длительного времени.
В зависимости от масштаба и зрелости ваших игр, существуют разные способы решения этой проблемы. В идеале, ваша игра могла бы динамически адаптироваться к разным размерам экрана, предлагая улучшенный, захватывающий опыт для пользователей с большими экранами. Другой подход заключается в поиске креативных способов заполнить пустое черное пространство полезной информацией, такой как статистика, карты или окна чата, или же использовать изображения, относящиеся к игре, в качестве фона вместо черного, что обеспечит более приятное обрамление для основного игрового процесса.
По возможности, разрешите пользователям использовать приложение в обеих ориентациях экрана, если это позволяет размер экрана.
Пример 1

Эта игра-головоломка — взрослая игра для Android, разработанная для телефонов с вертикальной ориентацией экрана. На больших горизонтальных экранах она работает с черными полосами по бокам. Поскольку у игры большая и активная база пользователей, а разработчик сосредоточен на своей следующей игре, он решил добавить изображение с мягким фокусом на фон каждого уровня и меню, чтобы обрамить игру, не требуя переработки пользовательского интерфейса. В связи с активной разработкой следующей игры, разработчик включает поддержку горизонтальной ориентации экрана в новую игру.
Пример 2

Гоночная игра для мобильных устройств заблокирована в альбомном режиме, чтобы оптимизировать пространство экрана для телефонов. В последнее время пользователи планшетов и ChromeOS жалуются на неудобство игры и просят добавить поддержку портретного режима. Разработчик включил в свой код проверку размера экрана, и если экран достаточно большой, портретный режим разрешается. Чтобы сохранить широкоугольный обзор, необходимый для игры, контент размещается посередине экрана, а дополнительная панель интерфейса, напоминающая автомобильную стереосистему, появляется внизу экрана, позволяя пользователям легко переключать радиостанции, в то время как карта и статистика гонки перемещаются в верхнюю часть экрана, освобождая обзор через лобовое стекло и улучшая игровой процесс.
См. также рекомендации по использованию больших экранов в Android и документацию по размерам экрана в Android .
Возможность работы в многооконном режиме
Игры часто обеспечивают пользователям полное погружение в происходящее на весь экран. Однако некоторые пользователи настольных компьютеров или складных устройств предпочитают одновременно открывать и отображать в отдельном окне чат, музыку или сервисы потокового видео. Если они записывают или демонстрируют свой экран, также может быть полезно иметь несколько открытых окон.
Многооконный режим является стандартным поведением для приложений и игр Android, что применимо к настольным компьютерам ChromeOS, а также к телефонам и планшетам в режиме разделенного экрана. Если вы хотите предотвратить изменение размера вашей игры, укажите в файле AndroidManifest.xml , что она не масштабируема.
android:resizeableActivity="false"
Если ваша игра поддерживает изменение размера, следует учесть несколько важных моментов:
- При изменении размера окна Android по умолчанию «уничтожает» и «создает» вашу игру заново (см. жизненный цикл Android ). Ваша игра должна либо корректно отслеживать состояние во время этих пересозданий (см. документацию Jetpack ViewModel ), либо вручную обрабатывать эти изменения конфигурации и предотвращать пересоздание, позволяя игровому движку обрабатывать новый размер экрана. Для получения дополнительной информации см. это видео с конференции разработчиков игр 2019 года .
- Правильная обработка
onPauseв случае, если ваше приложение видимо иSTARTED, но неRESUMED. См. раздел «Жизненный цикл многооконного режима» . - Рассмотрите различные соотношения сторон для окон измененного размера (обрезка против масштабирования элементов).
Узнайте больше об управлении окнами .
Полноэкранный режим
Когда игра запущена в полноэкранном режиме, вы можете перевести её в иммерсивный режим, чтобы убрать рамки окна и другие отвлекающие элементы экрана. Дополнительную информацию см. в документации по полноэкранному режиму Android.
private fun hideSystemUI() { // Enables regular immersive mode. window.decorView.systemUiVisibility = ( View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY or View.SYSTEM_UI_FLAG_LAYOUT_STABLE or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_FULLSCREEN) }