370 likes | 488 Views
INPUT. Alexandre Tolstenko Nogueira Colaborador : Erick Luis Moraes de Sousa “ Puyol ” http://forum.gamux.com.br. Papel e caneta na mão !. Revisão. Revisão. Classe x Objeto; Classe x Struct ; Método x Atributo; O que é um construtor; Diferença entre vetores e lista;
E N D
INPUT Alexandre Tolstenko Nogueira Colaborador: Erick Luis Moraes de Sousa “Puyol” http://forum.gamux.com.br
Papel e canetanamão! Revisão
Revisão • Classe x Objeto; • Classe x Struct; • Método x Atributo; • O que é um construtor; • Diferença entre vetores e lista; • O que são pilhas e filas; • Árvores.
Motivos • Evitar ter que escrever diversas vezes os códigos de captura de dados; • Criar uma forma de tratar todos os tipos de entrada de maneira idêntica (abstrair); • Automatizar o tratamento de input.
Motivo Pessoal • 8ª Série: Usar o mouse de bolinha como um medidor de forças: acelerômetro; • 1º Ano: Usar a entrada analógica serial de joystick e o mouse para mapear a face de uma moeda.
Objetivos • Conhecer as formas de captura de dados de periféricos para games; • Entender os estados de um periférico de game; • Aprender a tratar inputs; • Generalizar os periféricos para um periférico virtual.
Teclado • Toda captura de dados é booleana: pressionado ou liberado; • A quantidade máxima de teclas pressionadas varia de teclado para teclado e geralmente são 3.
Controle de Xbox • ThumbSticks variam entre -1.0f e 1.0f para cada eixo; • DPad são ButtonState: Pressed ou Released; • Os Triggers variam entre 0.0f e 1.0f; • Possui dois motores para vibração, um no lado esquerdo e outro no lado direito. Um grave e outro agudo; • Buttons são ButtonState. • Ex. Recicle
Mouse • Os botões do mouse são ButtonState, podendo ser released ou pressed; • O valor do botão do meio, scrollwheel, é dado por um inteiro que é acumulado desde o início do jogo; • A posição do mouse é determinada a partir de duas variáveis que armazenam sua posição X e Y; • Observação: Implementamos uma biblioteca que permite capturar até 128 mouses simultaneamente.
WM7 • O aparelho com Windows Mobile 7 possui: • Acelerômetros; • Touchscreen que suporta multitouching; • Motor que vibra o aparelho; • Cada toque possui posição, estado, id e pressão; • Microfone.
Wiimote • O Wiimote é o sensor, enquanto que a barra é o emissor de infra-vermelho; • Possui posição na direção que está sendo apontado, velocidade e aceleração; • Pode-se controlar o output (leds e vibração); • A biblioteca utilizada por nós consegue controlar quatro sensores do Wiimote. Dada essas quatro informações deve-se calcular o centro da mira; • Extensões.
Outros • DirectInput; • Tratamento direto com a memória (escrever um driver): multimouse e wiimote; • Projeto Natal; • Câmeras; • Realidade Aumentada.
Problema • Qual é o problema de apenas verificar se a tecla está pressionada? • E se ele disparar um evento como mudar tela e a seguinte também usa essa tecla para mudar de tela? • E se quisermos tratar um combo? • Hadouken: Meia lua para baixo + soco. • Qual o problema de mandar o personagem andar o quanto que o thumbstick se dobrou? • DeadZone.
Solução • Eventos: • Guardar estado anterior; • Verificar estados “JustPressed” ou “JustRelease”; • Combo: • Guardar lista de estados anteriores; • GamePad: • Região na qual a captura de dados é desprezada, chamada de deadzone.
GameComponent • Componentes independentes de um jogo que não sejam desenháveis na tela: • Engine de Física, Networking, Input e qualquer outro componente que se atualize sem desenhar na tela; • Possui métodos semelhantes ao do Microsoft.XNA.Framework.Game: • Initialize (); • Update ().
DrawableGameComponent • Componentes independentes de um jogo que sejam desenháveis na tela: • Telas e Gerenciadores de Tela, Menus, Interfaces Gráficas; • Possui métodos semelhantes ao do Microsoft.XNA.Framework.Game: • Initialize (); • Update (); • Draw ().
Modificadores • Modificadores de Acesso: • Public: • O membro declarado como public pode ser acessado de qualquer outra classe do jogo; • Private: • Só pode ser acessada dentro do escopo no qual foi declarada; • Internal: • Só pode ser acessada por membros do mesmo código; • Protected: • Só pode ser acessada da classe em que foi declarada ou de classes que herdem da primeira.
Outros Modificadores • Static; • Override; • Const; • Extern; • Abstract; • Event; • Sealed; • Partial; • Readonly; • Unsafe; • Virtual; • Volatile.
Static • Quando se declara algo como static, o mesmo é armazenado numa posição de memória, podendo-se utilizá-la e alterá-la sem ter de criar novas instâncias dela; • Não existe construtor; • Métodos e variáveis são acessados diretamente. publicstaticclassClasseExemplo {publicstatic Vector2 position; publicstaticInputStateGetState(){...} }
Override • Quando uma classe herda de uma segunda e queremos re-implementar um método da primeira na segunda: • A Game1 herda da Game e caso queiramos chamar o método da primeira classe, utilizamos “base”: protectedoverridevoidInitialize() { base.Initialize(); }
InputManager Genérico • Classe genérica que envelopa todos os tipos de input para que um programador possa utilizá-lo de maneira transparente; • Ao invés de sempre procurar saber qual o input, a posição do mouse e a posição do Wiimote seriam tratadas da mesma maneira; • Num caso extremo de um game simples, podemos tratar gamepad, mouse, wiimote, keyboard, entre outros inputs de maneira idêntica.
InputState Genérico • Classe genérica que armazena todos os tipos de input para que um programador possa utilizá-lo de maneira transparente; • Ex. Solução para Direcionais: • Eixo X e Y como float. • Caso tecla Up for pressionada, Y = -1; • Caso tecla Downfor pressionada, Y = 1; • Caso gamepad mova o thumb para baixo: • Y = quantidade de deslocamento.
Prática • Prática: • Programar um Mata-Moscasusandomais de um tipo de input simultaneamente; • Envelopartodosos inputs no mesmoInputState. • Desafio: • Utilizar Multi-Mouse e/ouWiimote
Agradecimento spriteBatch.DrawString( Arial, "Obrigado Pela Atenção!", positionVect, Color.Black);