Si bien muchos dispositivos ChromeOS tienen pantallas táctiles, para los juegos, la mejor experiencia de interacción en estos dispositivos de pantalla grande suele brindarse a través del mouse, el teclado y el control de juegos. El mundo de los juegos para dispositivos móviles suele centrarse en el tacto, por lo que se debe pensar en cómo brindar la mejor experiencia a los usuarios que no usan el tacto.
Comienza por consultar las prácticas recomendadas para agregar compatibilidad con teclados, mouse y controles de juegos. Deberás prestar especial atención al caso en que los usuarios mantengan presionadas las teclas o presionen varias teclas.
Las acciones basadas en el tacto son adecuadas para las Chromebooks con pantallas táctiles, pero también es importante incluir controles físicos bien pensados para brindar una excelente experiencia. Por ejemplo, la entrada del mouse es excelente para ajustar la vista o apuntar, pero no debería ser necesaria para realizar acciones. Si un juego para dispositivos móviles tiene un menú en pantalla que permite al usuario usar una linterna, una espada o un escudo presionando un botón con el pulgar, requerir que haga clic en estos botones con un mouse proporcionará una experiencia deficiente. En cambio, se deben designar teclas del teclado para activar cada acción anulando onKeyUp o onKeyDown. Consulta la página de compatibilidad de entrada para obtener detalles y código.
Captura del mouse
Los juegos en primera persona se ven mejor en computadoras de escritorio cuando implementan la captura del mouse. Esto oculta el puntero del mouse y permite que el usuario mueva el punto de vista, apunte, dirija, etcétera, con el mouse. A continuación, se muestra una demostración básica de captura del mouse que registra la posición del puntero y los estados de los botones después de que el usuario hace clic en una vista de texto llamada text_clickme. Consulta la documentación sobre la captura del puntero de Android para obtener más información.
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) } }
Chat
Las funciones de chat pueden ser un componente importante de los juegos multijugador. Tómate un tiempo para pensar cómo interactuarán los usuarios con la función de chat del juego mientras juegan. En particular, si están jugando con el teclado, no deberían tener que usar el mouse o la pantalla táctil para acceder al chat o enviar mensajes.
Un patrón podría ser que una tecla del teclado enfoque el cuadro de chat y que la tecla Intro controle el envío de mensajes.
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) } }
Consulta la documentación del teclado en la página de compatibilidad de entrada de Android.
Compatibilidad con pluma stylus
Las apps de dibujo y los juegos basados en deslizamientos pueden aprovechar la entrada de lápiz en dispositivos ChromeOS. Consulta la página de entrada con lápiz para obtener más detalles.
Controles de juegos
Las Chromebooks admiten hasta cuatro controles para juegos. Los desarrolladores deben usar las APIs estándar de controles para juegos de Android para brindar compatibilidad con ellos.
Los botones se asignan a valores comunes después de una asignación común. Lamentablemente, no todos los fabricantes de controles de juegos siguen las mismas convenciones de asignación. Permitir que los usuarios seleccionen diferentes asignaciones populares para controles puede proporcionar una experiencia mucho mejor.