Os dispositivos Android têm vários formatos e tamanhos. Amplie o alcance do seu jogo permitindo que os jogadores joguem onde quiserem, seja em um smartphone, tablet, PC, TV, carro ou headset de RV. Você vai aprender:
- Como o suporte a mouse e teclado pode levar seu jogo aos jogadores em PC e ChromeOS, além de melhorar a jogabilidade em dispositivos de tela grande.
- Como encontrar seus jogadores mais dedicados com a integração do gamepad.
- Como adicionar suporte a stylus para uma jogabilidade precisa e responsiva em qualquer lugar.
- Como oferecer suporte ao controle de TV e desbloquear a tela maior que os jogadores têm: a TV.
- Considerações de design sobre quando alternar entre métodos de entrada.
- O que os jogos multiformato fazem para oferecer suporte às preferências de entrada dos jogadores.
- E muito mais.
Compatibilidade automática
O Android tem compatibilidade automática sem toque sempre que possível, por exemplo:
dispatchTouchEvent
/onTouchEvent
respondem com eventos de movimento, mesmo para cliques ou entrada de stylus. Isso significa que, se você não marcar o tipo de ferramenta, a lógica de processamento de toque vai funcionar com o mouse e a stylus.- Alguns eventos de gamepad e de controle de TV não processados são reenviados como eventos de teclado.
Formatos semelhantes a PC, como o Google Play Games e o ChromeOS, geram toques de cliques do mouse por padrão. Como pode não haver uma tela touch para usar, isso oferece um nível básico de compatibilidade.
Os eventos de mouse e stylus são enviados para callbacks de toque.
Os eventos de gamepad e controle de TV não processados são reenviados como eventos de teclado.
Formatos semelhantes a PC, como o Google Play Games e o ChromeOS, geram eventos de toque em vez de eventos de mouse por padrão para maximizar a compatibilidade com jogos que esperam entrada de touchscreen.
Para melhorar a experiência do usuário, implemente o suporte direto para entradas sem toque em vez de depender da compatibilidade automática.
Suporte a todos os formatos
O Android é executado em uma lista cada vez maior de dispositivos. Não importa se os jogadores abrem o smartphone para usar como um tablet de tela grande, ligam a TV com Android, abrem um jogo Android no Chromebook ou iniciam um jogo rápido no carro enquanto esperam a recarga: você pode envolver os jogadores em mais lugares e em mais telas do que nunca. Você só precisa garantir que o jogo possa ser jogado onde os jogadores estão:
Formato | Entrada padrão típica | Tela touchscreen | Mouse e teclado | Gamepad | Stylus1 | Botão direcional de cinco direções |
---|---|---|---|---|---|---|
Smartphone | Tela touchscreen | Sim | Sim | Sim | Sim | Sim |
Tela grande. | Tela touchscreen | Sim | Sim | Sim | Sim | Sim |
PC2 | Mouse e teclado | Não | Sim | Sim | Não | Não |
ChromeOS3 | Touchpad, mouse e teclado | Às vezes | Sim | Sim | Sim | Sim |
TV | Botão direcional de cinco direções | Não | Sim | Sim | Não | Sim |
Cars4 (Automotive OS) |
Tela touchscreen | Sim | Sim | Sim | Não | Sim |
Assistir5 | Tela touchscreen | Sim | Não | Não | Não | Não |
Esta tabela tem o objetivo de ajudar você a priorizar o suporte a novos mecanismos de entrada, destacando a entrada esperada em cada formato. Lembre-se de que você precisa:
- Evite ter um mecanismo de entrada padrão. Isso pode restringir inadvertidamente o alcance das suas ações não presenciais. Por exemplo, embora a maioria dos jogadores queira jogar jogos do ChromeOS com mouse e teclado, alguns ainda podem querer suporte para tela touch, dependendo do perfil do dispositivo.
- Evite bloquear mecanismos de entrada em fatores de forma. O Android funciona com uma ampla variedade de periféricos, e os dispositivos híbridos estão se tornando mais populares. Remover o suporte ao teclado do build do smartphone pode fazer com que seu jogo pareça incompleto se o jogador tiver um tablet com um teclado destacável.
Entrada do mouse
A tela maior e mais imersiva de um jogador pode estar executando o Android, seja em um laptop ChromeOS, tablet Android ou PC. Os jogadores costumam esperar jogar com um mouse nesses dispositivos, e adicionar suporte pode aumentar o engajamento deles. O Android oferece suporte aos recursos comuns aos sistemas operacionais de computador, incluindo:
- Suporte a cliques com o botão esquerdo, direito e do meio, além de botões extras, como voltar e avançar
- Detecção da roda de rolagem
- Relatório de movimento do mouse absoluto ou relativo (também conhecido como captura de ponteiro)
- A capacidade de definir ícones de ponteiro personalizados
Existem guias específicos para formatos:
Entrada do touchpad
A captura de entrada do touchpad no Android é um pouco diferente do suporte a mouse. Ao chamar requestPointerCapture()
, você solicita acesso bruto a toques no pad. Isso significa que você recebe eventos para cada toque da mesma forma que recebe eventos multitoque de uma tela touch, exceto que as coordenadas estão no espaço de coordenadas do touchpad, e não do display. A detecção de gestos do touchpad integrado e a filtragem da palma da mão do Android são desativadas nesse modo. Se, por exemplo, o usuário estiver movendo um dedo no pad enquanto descansa o polegar no canto inferior esquerdo pronto para clicar, cabe ao jogo determinar qual movimento do dedo deve ser usado na lógica (por exemplo, para mover a câmera).
Isso significa que gamepads com touchpads integrados podem ser usados como uma tela touchscreen para entrada robusta baseada em gestos.
Para determinar se o jogador está usando um mouse ou um touchpad durante a captura do ponteiro, verifique os valores de origem de InputDevice#getSources()
ou MotionEvent#getSource()
para InputDevice.SOURCE_TOUCHPAD
.
Entrada do teclado
O suporte a teclado é quase universal em todos os dispositivos Android. Dependendo do tipo de jogo que você desenvolve, os benefícios de adicionar a detecção de teclado variam de aumentar a base de jogadores tornando o jogo mais acessível a torná-lo mais imersivo e intuitivo.
Confira algumas maneiras comuns de melhorar o jogo com suporte a teclado:
- A mecânica multitoque precisa ser mapeada para o teclado em dispositivos não touchscreen. Os jogos que exigem dois ou mais toques simultâneos, como mover e pular, se beneficiam do mapeamento dessas ações para pressionamentos de teclado, melhorando a jogabilidade em telas grandes e não sensíveis ao toque.
- Navegue pelos menus usando o teclado. Adicionar navegação por botões, como teclas de seta e Enter, aos menus e elementos estáticos de jogabilidade permite que os jogos sejam jogados em TVs e melhora a acessibilidade em todos os formatos.
- Adicione teclas de atalho para ações na tela. Mapeie qualquer coisa que um jogador possa tocar na tela para uma ação do teclado. O acesso rápido a ações, como selecionar unidades em um jogo de estratégia ou ativar slots de inventário em um jogo de ação, mantém os jogadores imersos no jogo.
Lembre-se de que, embora os teclados QWERTY sejam bastante comuns, há muitos layouts populares diferentes, e alguns caracteres que são um único pressionamento de tecla em um layout podem ser um acorde em outro.
Se o jogo usar a posição relativa das teclas para realizar ações, como usar W, A, S e D como teclas de seta para se mover, use InputDevice.getKeyCodeforKeyLocation()
para mapear a localização de uma tecla QWERTY para um código de tecla em KeyEvent.getKeyCode()
. Se o layout do player mudar, onInputDeviceChanged()
será chamado.
Ao adicionar a entrada de texto a um jogo, o TextInput na GameActivity oferece um mecanismo para processar de forma confiável a entrada do IME, marcas diacríticas ou outras variações específicas da região no layout, usando o mecanismo de renderização de texto no jogo. Isso evita muitas armadilhas de processamento direto da entrada do teclado ou do uso de um widget EditText
fora da tela.
Entrada de gamepad
Os gamepads têm suporte formal no Android, incluindo eventos de conexão e desconexão, suporte háptico, suporte avançado de entrada, incluindo giroscópios, e suporte de saída, como cor de luz, quando disponível.
Os desenvolvedores de apps podem detectar entradas de controles de jogo usando callbacks View
ou Activity
, mas é recomendável que os desenvolvedores de jogos usem a biblioteca de controles de jogos, que:
- É escrito em C++ para facilitar a integração ao seu próprio mecanismo de jogo
- Centraliza todos os recursos do gamepad em uma API
- Elimina a ambiguidade dos símbolos nos botões de um gamepad para que os rótulos do jogo possam corresponder ao gamepad do jogador
- Unifica o relatório de eventos do gamepad em casos em que os botões seriam entradas analógicas em alguns gamepads, mas entradas binárias em outros
- Oferece compatibilidade limitada com versões futuras em dispositivos Android mais antigos para gamepads mais recentes
Entrada da stylus
O Android tem suporte avançado para stylus na maioria dos dispositivos, incluindo detecção de pressão, orientação, inclinação, passagem do cursor e palma da mão. Os eventos da stylus são enviados para callbacks de toque para ajudar na compatibilidade, mas é importante testar com um dispositivo de stylus caso a lógica do mecanismo filtre esses eventos. A integração completa beneficia jogos com pequenas áreas de toque ou jogos em que o desenho livre é natural.
Quando a renderização fica para trás do movimento da stylus, a latência é mais óbvia do que quando é bloqueada por um dedo ou desconectada da tela, como com um teclado, mouse ou gamepad. Por esse motivo, o Android oferece um pipeline de baixa latência para renderizar traços com latência de até 4 ms do movimento da caneta até a exibição na tela. Há três maneiras de aproveitar esse recurso, fazendo com que o jogo pareça diretamente conectado ao mundo real:
- A biblioteca Jetpack Ink oferece um kit de ferramentas conveniente para adicionar renderização de traços responsivos a qualquer projeto Android.
- Para jogos que não podem ou não querem depender de um componente Kotlin para renderização de traços, o código-fonte completo em C++ está disponível. Isso permite que os desenvolvedores integrem o que precisam diretamente à tecnologia.
- Para jogos que exigem integração personalizada completa, é possível executar a lógica de renderização personalizada diretamente no buffer frontal para maximizar a capacidade de resposta e o controle.
Controles de TV
Os dispositivos Android TV vêm com um controle remoto que inclui um D-pad de cinco direções, que compreende as quatro direções cardinais e um botão OK. Os aplicativos que usam o sistema de widgets integrado do Android oferecem suporte a eles por padrão, mas os desenvolvedores precisam testar os widgets personalizados do jogo para manter a compatibilidade com dispositivos de TV.
Consulte a documentação do Android TV para mais informações.
Outras considerações
Para oferecer a melhor experiência aos jogadores, projete várias formas de entrada e alterne entre elas. Dessa forma, o jogador pode alternar rapidamente entre diferentes métodos de entrada, dependendo do modo de jogo em que ele está, ou um jogo pode fazer a transição entre diferentes configurações de um dispositivo Android com facilidade.
Com isso em mente, observe o seguinte:
- Verificar a presença de um tipo de entrada é melhor do que filtrar pelo formato. Por exemplo, se você só ativar o suporte a mouse e teclado no ChromeOS, os jogadores em tablets com teclados destacáveis não vão se beneficiar do seu esforço extra.
- Há considerações além do formato que afetam a melhor forma de entrada. Por exemplo, as necessidades de acessibilidade de um jogador podem tornar o uso de um mouse ou touchscreen difícil ou doloroso, mas um gamepad ou teclado pode ser ideal.
- Qualquer suporte é melhor do que nenhum. O ideal é responder às mudanças de entrada em tempo real, mas os jogadores preferem algum suporte a nenhum, desde que consigam acessá-lo.
- A melhor entrada pode mudar entre as execuções do jogo. Por exemplo, uma tela touchscreen é preferível para jogar em movimento, um gamepad quando um smartphone está conectado a uma TV e um mouse e teclado quando você está sentado em uma mesa.
Como responder à entrada do usuário
Os jogos para dispositivos móveis típicos oferecem suporte a um jogador por dispositivo. Para melhores resultados, um jogo responde a todas as entradas possíveis e muda a interface com base no que o jogador está usando ativamente. Dessa forma, uma versão do jogo funciona automaticamente em todos os formatos, e os jogadores podem até misturar e combinar entradas para atender às necessidades deles.
Muitas vezes, os desenvolvedores querem ter um método de entrada padrão com atrasos integrados antes de mudar a IU. O que isso significa?
- Como a maioria dos jogadores joga em telas sensíveis ao toque, mostre os controles de toque na inicialização. Se um jogador começar a jogar com um teclado ou gamepad e não usar a tela touchscreen por algum tempo, desative a camada de toque.
- Se um jogador estiver usando o gamepad e pressionar uma tecla do teclado, mude as dicas no jogo para mostrar os botões do teclado em vez dos botões do gamepad.
- Quando um jogador estiver usando o teclado e o gamepad ao mesmo tempo, crie um atraso antes de alternar a interface de um conjunto de dicas para outro para evitar a cintilação da tela.
- Verifique o tipo de origem de entrada ao processar entradas. As teclas do teclado e os botões do gamepad emitem eventos de tecla pressionada.
- Tente não marcar uma entrada como processada, a menos que o jogo possa processá-la. O Android emite novamente alguns eventos para facilitar a compatibilidade com formatos mais recentes, por exemplo, transformando o botão A do gamepad no botão OK.
Anotar o suporte à entrada no manifesto
Embora não seja obrigatório, é melhor anotar com flags de recursos do manifesto o tipo de entradas que você processa. As flags comuns são:
android.hardware.type.pc
: desative as camadas de compatibilidade de entrada no ChromeOS e no PC para permitir que os desenvolvedores processem diretamente os eventos do mouse. Definaandroid:required="false"
para que o jogo ainda seja entregue aos smartphones.android.hardware.gamepad
: os apps e jogos recebem eventos de gamepad, mesmo que não ofereçam suporte a gamepads. A definição dessa flag de manifesto e a configuraçãoandroid:required="false"
permitem que o jogo seja veiculado para dispositivos Android TV com gamepads conectados.
-
Os fabricantes podem oferecer suporte à stylus para alguns dispositivos, mas não há um formato em que o suporte seja garantido. As pranchetas podem ser conectadas a um dispositivo Android e aparecer como uma stylus. ↩
-
Embora alguns PCs tenham suporte a tela touchscreen e stylus, o cliente do Google Play Games responde apenas a eventos de mouse do sistema operacional host. Para maximizar a compatibilidade, os eventos de mouse aparecem como eventos de toque no cliente por padrão. Consulte a seção Entrada do mouse para mais informações. ↩
-
Os dispositivos ChromeOS geralmente têm suporte a mouse e teclado, mas as telas touchscreen são opcionais. Muitos dispositivos com tela touchscreen também oferecem suporte à entrada por stylus. ↩
-
O Android Automotive OS se refere a carros com Android integrado, que podem funcionar sem um smartphone Android. Este gráfico se refere ao Automotive OS. O Android Auto projeta um app de um smartphone no carro, e os dispositivos compatíveis com o Android Auto (projeção) podem não ter tela touchscreen. ↩
-
Os dispositivos Wear OS têm conectividade limitada. É possível procurar periféricos Bluetooth, mas o SO geralmente não consegue se conectar. ↩