INPUT
Alexandre Tolstenko NogueiraColaborador: Erick Luis Moraes de Sousa “Puyol”
http://forum.gamux.com.br
REVISÃOPapel e caneta na mão!
4
Revisão
1. Classe x Objeto;2. Classe x Struct;3. Método x Atributo;4. O que é um construtor;5. Diferença entre vetores e lista;6. O que são pilhas e filas;7. Árvores.
MOTIVOS
6
Motivos
1. Evitar ter que escrever diversas vezes os códigos de captura de dados;
2. Criar uma forma de tratar todos os tipos de entrada de maneira idêntica (abstrair);
3. Automatizar o tratamento de input.
MOTIVO PESSOAL
8
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.
OBJETIVO
10
Objetivos
1. Conhecer as formas de captura de dados de periféricos para games;
2. Entender os estados de um periférico de game;
3. Aprender a tratar inputs;4. Generalizar os periféricos para um periférico
virtual.
INPUTComo interagir com o game.
Teoria Prática
Teoria
Tipos de Input
Teclado Xbox Mouse WM7 Wii Outros
Dificuldades OO Game Components
Input Genérico
14
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.
15
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
16
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.
17
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.
18
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.
19
Outros
• DirectInput;• Tratamento direto com a memória
(escrever um driver): multimouse e wiimote;
• Projeto Natal;–Câmeras;–Realidade Aumentada.
Teoria
Tipos de Input Dificuldades
Problema Solução
OO Game Components
Input Genérico
21
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.
22
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.
23
Deadzone
Teoria
Dificuldades Tipos de Input Game Components
Game Component
Drawable Game
Component
OO Input Genérico
25
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 ().
26
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 ().
Teoria
Dificuldades Tipos de Input Game Components OO
Modificadores Override
Input Genérico
28
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.
29
Outros Modificadores– Static;– Override;– Const;– Extern;– Abstract;– Event;– Sealed;– Partial;– Readonly;– Unsafe;– Virtual;– Volatile.
30
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.
public static class ClasseExemplo{
public static Vector2 position;public static InputState GetState(){...}
}
31
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”:
protected override void Initialize(){ base.Initialize();}
Teoria
Dificuldades Tipos de Input Game Components Herança Input
Genérico
InputManager Genérico
InputState Genérico Diagrama
33
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.
34
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 Down for pressionada, Y = 1;• Caso gamepad mova o thumb para baixo:
– Y = quantidade de deslocamento.
Teoria Prática
36
Prática
• Prática:–Programar um Mata-Moscas usando mais
de um tipo de input simultaneamente;• Envelopar todos os inputs no mesmo InputState.
• Desafio:–Utilizar Multi-Mouse e/ou Wiimote
37
Agradecimento
spriteBatch.DrawString( Arial, "Obrigado Pela Atenção!", positionVect, Color.Black);
Top Related