Anche se molti dispositivi ChromeOS hanno touch screen, per i giochi la migliore esperienza di interazione su questi dispositivi con schermi grandi viene spesso offerta tramite mouse, tastiera e gamepad. Il mondo dei giochi mobile è spesso incentrato sul tocco e bisogna riflettere su come fornire la migliore esperienza agli utenti che non utilizzano il tocco.
Inizia consultando le best practice per l'aggiunta del supporto di tastiera, mouse e controller di gioco. Presta particolare attenzione al caso in cui gli utenti tengono premuti i tasti o ne premono più di uno.
Le azioni basate sul tocco vanno bene per i Chromebook con touchscreen, ma è importante includere anche controlli fisici ben studiati per un'esperienza ottimale. Ad esempio, l'input del mouse è ideale per regolare la visualizzazione o la mira, ma non deve essere necessario per eseguire azioni. Se un gioco mobile ha un menu sullo schermo che consente a un utente di usare una torcia, una spada o uno scudo premendo un pulsante con il pollice, richiedere di fare clic su questi pulsanti con un mouse offrirà un'esperienza scadente. I tasti della tastiera devono invece essere designati per attivare ogni azione sostituendo onKeyUp o onKeyDown. Per dettagli e codice, consulta la pagina sulla compatibilità degli input.
Acquisizione del mouse
I giochi in prima persona hanno un aspetto migliore sul computer quando implementano l'acquisizione del mouse. In questo modo il puntatore del mouse viene nascosto e l'utente può spostare il punto di vista, mirare, sterzare e così via usando il mouse. Di seguito è riportata una demo di base dell'acquisizione del mouse che registra la posizione del puntatore e gli stati dei pulsanti dopo che l'utente fa clic su una visualizzazione di testo denominata text_clickme. Per saperne di più, consulta la documentazione sulla cattura del puntatore di 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) } }
Chat
Le funzionalità di chat possono essere un componente importante dei giochi multigiocatore. Prenditi un po' di tempo per pensare a come gli utenti interagiranno con la funzionalità di chat del tuo gioco mentre giocano. In particolare, se sta giocando con la tastiera, non dovrebbe dover usare il mouse o il touchscreen per accedere alla chat o inviare messaggi.
Un pattern potrebbe essere quello di avere un tasto della tastiera che mette a fuoco la casella della chat e gestisce il tasto Invio per inviare i messaggi.
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 documentazione sulla tastiera nella pagina Compatibilità input di Android.
Supporto per stilo
Le app di disegno e i giochi basati sullo scorrimento possono sfruttare l'input della stilo sui dispositivi ChromeOS. Per ulteriori dettagli, consulta la pagina Input con stilo.
Controller di gioco
I Chromebook supportano fino a quattro controller di gioco. Gli sviluppatori devono utilizzare le API Game Controller standard di Android per supportarli.
I pulsanti sono mappati a valori comuni seguendo una mappatura comune. Purtroppo, non tutti i produttori di controller di gioco seguono le stesse convenzioni di mappatura. Consentire agli utenti di scegliere tra diverse mappature dei controller più comuni può migliorare notevolmente l'esperienza.