Objetivo do mouse em um FPS

38

Gostaria de fazer um tiro em primeira pessoa e mover a câmera com o mouse. O problema é que quando o cursor atinge os limites da tela, a câmera não gira mais. Como posso manter o mouse centralizado e detectar seus movimentos de qualquer maneira?

Urso preto
fonte
3
Esta é uma grande pergunta.
The Duck Comunista

Respostas:

39

A abordagem geral para lidar com isso na programação clássica do Win32 é capturar o delta do mouse em cada quadro e, em seguida, redefinir a posição do mouse no centro da tela. Você também deseja tornar o cursor do mouse invisível, obviamente, caso contrário, as coisas parecerão feias.

Você pode fazer a mesma coisa no XNA, apenas trabalha com uma interface ligeiramente diferente. Então você pode fazer algo como:

  1. Na inicialização, defina a posição do mouse no centro da tela com Mouse.SetPosition .
  2. Também na inicialização, torne o mouse invisível .
  3. Cada quadro de entrada, pegue o estado atual do mouse .
  4. Como você sabe que o mouse estava no centro, é possível usar os valores atuais de X e Y do objeto MouseState que você recuperou na etapa 3 para calcular o movimento delta nas duas dimensões. Você pode alimentar esses deltas para o resto da lógica do jogo, como (no seu caso) o código da câmera.
  5. Redefina o mouse para o centro da tela antes de passar para o próximo quadro.

EDIT: Além disso, aqui está um tutorial que descobri através de uma pesquisa no Google por "entrada relativa do mouse XNA" (que é o que você está perguntando). Acho que é um pouco antigo, então alguns dos métodos podem ter seus nomes alterados, mas os conceitos ainda devem ser aplicados.

Edição 2: significava "manipulando isso no Win32" e não "manipulando isso é Win32", atualizado de acordo.

Josh
fonte
Muito obrigado. isto é exatamente o que eu estava procurando! ;)
BlackBear