Хотя многие устройства ChromeOS оснащены сенсорными экранами, для игр наилучшее взаимодействие на таких устройствах с большими экранами часто обеспечивается с помощью мыши, клавиатуры и геймпада. Мир мобильных игр часто ориентирован на сенсорное управление, поэтому необходимо подумать о том, как обеспечить наилучший опыт для пользователей, не использующих сенсорный экран.
Для начала ознакомьтесь с рекомендациями по добавлению поддержки клавиатуры, мыши и игровых контроллеров . Особое внимание следует уделить случаям, когда пользователи удерживают клавиши или нажимают несколько клавиш одновременно.
Сенсорное управление допустимо для Chromebook с сенсорными экранами, но для обеспечения комфортного игрового процесса важно также предусмотреть продуманные физические элементы управления. Например, ввод с помощью мыши отлично подходит для настройки обзора или прицеливания, но не должен быть обязательным для выполнения действий — если в мобильной игре есть экранное меню, позволяющее пользователю использовать факел, меч или щит, нажимая кнопку большим пальцем, то необходимость нажимать эти кнопки мышью создаст неудобства. Вместо этого, клавиши клавиатуры должны быть назначены для запуска каждого действия путем переопределения onKeyUp или onKeyDown . Подробности и код см. на странице совместимости ввода .
захват мыши
Игры с видом от первого лица лучше всего смотрятся на настольных компьютерах, если в них реализован захват мыши. Это скрывает указатель мыши и позволяет пользователю перемещать точку обзора, целиться, управлять движением и т. д. с помощью мыши. Ниже приведена базовая демонстрация захвата мыши, которая записывает положение указателя и состояние кнопок после того, как пользователь щелкнет по текстовому полю с именем text_clickme . Дополнительную информацию см. в документации по захвату указателя в Android.
class MainActivity : AppCompatActivity() { var mouse_x: Float = 0f var mouse_y: Float = 0f var mouse_left_pressed = false var mouse_center_pressed = false var mouse_right_pressed = false var mouse_scrolling = false override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) text_clickme.setOnClickListener { text_clickme.requestPointerCapture() } text_clickme.setOnCapturedPointerListener { view, motionEvent -> // Get the coordinates required by your app mouse_x = motionEvent.x mouse_y = motionEvent.y when (motionEvent.action) { ACTION_DOWN -> { when (motionEvent.buttonState) { BUTTON_PRIMARY -> mouse_left_pressed = true BUTTON_SECONDARY -> mouse_right_pressed = true BUTTON_TERTIARY -> mouse_center_pressed = true } mouse_scrolling = false } ACTION_CANCEL, ACTION_UP -> { when (motionEvent.actionButton) { BUTTON_PRIMARY -> mouse_left_pressed = false BUTTON_SECONDARY -> mouse_right_pressed = false BUTTON_TERTIARY -> mouse_center_pressed = false 0 -> { mouse_left_pressed = false mouse_right_pressed = false mouse_center_pressed = false } } mouse_scrolling = false } ACTION_SCROLL -> { mouse_scrolling = true } else -> { mouse_scrolling = false } } // Indicate event was consumed true } } // Release pointer capture when escape pressed override fun onKeyUp(keyCode: Int, event: KeyEvent?): Boolean { if (keyCode == KEYCODE_ESCAPE) { text_clickme.releasePointerCapture() return true; } return super.onKeyUp(keyCode, event) } }
Чат
Функции чата могут быть важной составляющей многопользовательских игр. Уделите время тому, чтобы подумать, как пользователи будут взаимодействовать с функцией чата в вашей игре во время игры. В частности, если они играют с помощью клавиатуры, им не следует использовать мышь или сенсорный экран для доступа к чату или отправки сообщений.
Один из вариантов — назначить клавишу на клавиатуре фокус для окна чата, а клавишу Enter обрабатывать для отправки сообщений.
override fun onKeyUp(keyCode: Int, event: KeyEvent): Boolean { return when(keyCode) { KeyEvent.KEYCODE_C -> { edittext_chatbox.requestFocus() true } KeyEvent.KEYCODE_ENTER -> { submitChatMessage() true } else -> super.onKeyUp(keyCode, event) } }
Ознакомьтесь с документацией по клавиатуре на странице совместимости ввода Android.
Поддержка стилуса
Приложения для рисования и игры с управлением жестами могут использовать ввод с помощью стилуса на устройствах ChromeOS. Подробнее см. на странице, посвященной вводу с помощью стилуса .
Игровые контроллеры
Chromebook поддерживают до четырех игровых контроллеров. Разработчикам следует использовать стандартные API Android Game Controller для обеспечения их поддержки.
Кнопки назначаются на общие значения в соответствии с общепринятой системой сопоставления . К сожалению, не все производители игровых контроллеров придерживаются одних и тех же правил сопоставления. Предоставление пользователям возможности выбора из различных популярных вариантов сопоставления кнопок контроллера может значительно улучшить пользовательский опыт.