Skip to main content
Os pacotes de entrada brutos recebidos de cada dispositivo são encapsulados em objetos de “leitura”. As leituras contêm os dados originais do pacote bruto e (geralmente) uma ou mais transformações dos dados brutos em formatos de nível mais alto. Além de sua função como contêineres de dados, as leituras também servem como identificadores que fazem referência a uma posição específica dentro do fluxo de entrada.

Obtenção de leituras

A API GameInput oferece duas maneiras de obter leituras. A maneira mais comum é acessá-las diretamente do fluxo de entrada, por meio de métodos da interface IGameInput.
Chamar GetCurrentReading recupera a leitura mais recente do fluxo de entrada. Um filtro GameInputKind opcional pode ser passado para limitar as leituras retornadas a tipos específicos de entrada, como gamepad ou teclado. Um filtro IGameInputDevice opcional também pode ser passado para limitar as leituras retornadas apenas àquelas geradas pelo dispositivo especificado. Esses filtros podem ser aplicados individualmente ou em conjunto. As instâncias de IGameInputReading são singletons com contagem de referências. Recuperar uma leitura é uma operação extremamente rápida e leve: nenhuma alocação ou cópia de memória é realizada, e a chamada de API é livre de bloqueio, sem transições para o modo kernel. Como as leituras são singletons, um aplicativo pode comparar os ponteiros de leitura quanto à igualdade para saber se duas chamadas a GetCurrentReading retornaram a mesma leitura (o que significa que nenhuma nova entrada foi gerada). Jogos com necessidades de entrada menos complexas podem simplesmente sondar novas entradas uma vez por quadro e comparar o estado armazenado nas duas leituras em busca de diferenças (se não forem a mesma leitura). Jogos com necessidades de entrada mais complexas, no entanto, podem precisar percorrer o fluxo de entrada para obter uma visão completa de todas as alterações de estado de entrada que ocorreram desde o quadro anterior. Isso é possível com os métodos GetNextReading e GetPreviousReading, que permitem os mesmos filtros que GetCurrentReading. O fluxo de entrada mantém o último meio segundo de leituras históricas em seu buffer.
Como alternativa, os aplicativos podem registrar um retorno de chamada que é invocado sempre que uma entrada é gerada. Assim como nos métodos síncronos anteriores, vários filtros podem ser aplicados para controlar quais tipos de leitura são retornados e de quais dispositivos. Para obter mais informações, confira Retornos de chamada do GameInput na seção Tópicos avançados do GameInput.

Obtenção de dados das leituras

Embora cada leitura contenha os dados do pacote de entrada bruto do dispositivo, as leituras normalmente também contêm uma ou mais transformações de alto nível desses dados. Por exemplo, a entrada recebida de um gamepad também é analisada em uma estrutura padrão de formato fixo com identificadores conhecidos de botões e direcionais analógicos. As leituras geralmente contêm várias representações diferentes dos mesmos dados de entrada brutos, permitindo que os aplicativos escolham o formato mais adequado às suas necessidades. Os aplicativos podem consultar quais tipos de dados uma leitura contém chamando o método GetInputKind dela. Ele retorna um ou mais valores de sinalizador da enumeração GameInputKind.
Os tipos de dados disponíveis em uma leitura dependem do dispositivo de entrada e de suas propriedades físicas. Por exemplo, uma leitura de um teclado padrão pode conter apenas dados de teclado, enquanto uma leitura de um teclado com trackball integrado pode conter dados de teclado e de mouse. Quase todos os controles de jogo produzem leituras que contêm dados genéricos de “controle”, que são simplesmente uma coleção de estados anônimos de eixos e botões. Isso permite um amplo suporte a dispositivos para aplicativos com uma interface de mapeamento de entrada. No entanto, muitos controles de jogo (como gamepads) também expõem em suas leituras um estado familiar de formato fixo, que é muito mais fácil de consumir para jogos típicos.
A interface IGameInputReading contém métodos para recuperar o estado em qualquer um dos formatos aos quais a leitura dá suporte. Todas as diferentes representações disponíveis nas leituras são pré-calculadas, portanto, esses métodos simplesmente copiam alguns bytes de dados e retornam.

Um loop simples de entrada de gamepad

O código de exemplo a seguir é um exemplo de um loop de entrada totalmente funcional para gamepads. Algo a ser observado neste exemplo é que não há enumeração explícita de dispositivos. O único uso de IGameInputDevice é como identificador de dispositivo. Nenhum de seus métodos é chamado. Isso ilustra a natureza centrada na entrada da API GameInput e como ela pode simplificar o código para cenários de entrada comuns.

Documentação de referência da API

Confira também

Fundamentos do GameInput Tópicos avançados do GameInput Referência da API GameInput
Last modified on October 6, 2026