Skip to main content
Use este tópico para entender os usos exclusivos de teclados e mouses. Teclados e mouses são entradas nativas do GameInput.

Entrada de teclado

O método GetKeyState recupera o código de verificação e os dados de tecla virtual de cada tecla pressionada em um teclado. Esses dados de entrada são então retornados como uma matriz de comprimento variável de structs GameInputKeyState. Uma tecla pressionada é aquela que está sendo mantida pressionada no momento em que o teclado relatou uma entrada. Os teclados variam na frequência com que relatam entradas, normalmente de 125 Hz a 1.000 Hz. O estado do teclado é relatado separadamente para cada teclado individual conectado ao sistema. O estado rudimentar do teclado destina-se a mapear a entrada do teclado para ações do jogo, como movimentação ou disparo de uma arma. Ele não se destina à entrada regular de texto, e outras APIs são usadas para essa finalidade.

Lendo o estado das teclas

Use o código a seguir para implementar o GameInput para teclados e mouses no seu título.
O estado de cada tecla não é armazenado em um índice fixo dentro da matriz. Em vez disso, o número de elementos válidos na matriz aumenta à medida que as teclas são pressionadas. A matriz diminui à medida que as teclas são liberadas. Novas teclas são adicionadas ao final da matriz e, quando uma tecla é liberada, tudo é deslocado para preencher a lacuna. GetKeyCount retorna o número de teclas pressionadas, conforme mostrado no código a seguir. Isso é usado para determinar o tamanho da matriz que deve ser alocada para GetKeyState. Se a stateArray passada para GetKeyState for maior que o número de teclas pressionadas, os elementos excedentes da matriz não serão gravados nem zerados. Por outro lado, se stateArray for menor que o número de teclas pressionadas, a matriz será preenchida e as teclas pressionadas excedentes serão perdidas.
Teclados padrão só conseguem relatar de quatro a seis pressionamentos de tecla por vez, e mesmo teclados para jogos de ponta raramente oferecem suporte a mais de 12 a 16 teclas ao mesmo tempo. Dessa forma, usar GetKeyCount mantém pequeno o tamanho máximo da matriz. O tamanho máximo pode ser consultado por meio da interface IGameInputDevice. Observe que o membro codePoint especifica o glifo que o sistema acredita estar impresso na tecla associada, com base no layout de teclado atual. Ele se destina a exibir uma representação da tecla em uma interface de mapeamento de entrada, não a construir cadeias de caracteres de entrada de texto.

Entrada de mouse

O método GetMouseState recupera o movimento e o estado dos botões de um mouse, que são retornados em um único struct GameInputMouseState, conforme mostrado no código a seguir. Assim como o estado do teclado, o estado do mouse é relatado separadamente para cada mouse individual conectado ao sistema. <!—As with keyboard input, the CreateAggregateDevice method on the IGameInput interface is used to get the combined system mouse state.> —>

Lendo os movimentos do mouse

O movimento do mouse é relatado nativamente como uma série de valores delta, em vez de uma posição absoluta. Isso não é compatível com a natureza de sondagem de GetCurrentReading, pois solicitar periodicamente a leitura atual do mouse provavelmente perderá vários deltas intermediários. Em vez de usar GetNextReading para percorrer potencialmente dezenas de leituras históricas do mouse e somar os deltas, eles são acumulados em valores virtuais positionX e positionY. A partir daí, os deltas são calculados subtraindo os valores positionX e positionY das leituras anteriores obtidas. Os deltas individuais são acessíveis ao iterar por todas as leituras intermediárias, ou por meio dos deltas acumulados quando leituras intermediárias foram ignoradas. Os valores positionX e positionY são a soma de todos os deltas de movimento. Esses valores não se correlacionam de forma alguma com coordenadas do espaço da tela. O valor delta acumulado refere-se apenas aos eventos do mouse que um processo recebe enquanto tem o foco de entrada.

Associação de usuário

No momento, a associação de usuário não é compatível com teclados e mouses. Não há interface para mapear nenhum desses periféricos para um usuário.

Documentação de referência da API

Confira também

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