Blog oficial da célula acadêmica do Instituto Mauá de Tecnologia...

Uma caracteriza da versão atual do XNA (1.0 refresh) é que ele não suporta joystick que não sejam da Microsoft, isso significa, se não for o GamePad do Xbox 360 o seu jogo não vai reconhecer o joystick apenas com a classe “GamePad” e “GamePadState”, para isso vasculhamos a internet em busca de soluções para este problema e achamos diversas soluções, todas elas envolvendo o DirectX, como o código é meio complicado, e repetitivo, desenvolvemos uma biblioteca para que não seja preciso se preocupar com isso. Esta biblioteca somente detecta um controle, e não ativa o DualShock de alguns controles que contém esta característica.

Aqui tem o link onde vc pode baixar o código fonte dessa biblioteca:

Download

Lembrando que para este código funcionar corretamente é preciso desabilitar o LoaderLock no Debug, indo em Debug->Exceptions...; abra a arvore “Managed Debugging Assistants”, e remova o check do item “LoaderLock”.



Abaixo irei explicar a biblioteca bem por cima, só para se entender um pouco do que ela faz:

Classe Joystick
Esta classe contem duas funções fundamentais, InitDirectInput() e GetData().
A função InitDirectInput() inicia os comandos do DirectX, uma das grades diferenças do XNA para o DirectX é que algumas partes de parametrização e configurações iniciais já estão prontas, facilitando muito o desenvolvimento.
A função GetData() carrega os dados do Joystick.
Porem tanto o InitDirectInput como o GetData são exclusivos da classe, mas se vc tiver interesse em alterar o código para inserir funcionalidade novas, é nesta área que recomendo mexer, e claro, passe o código de novo para mim =D...
Classe JoystickStates
Esta classe contém os valores do Joystick sendo que contém os eixos X, Y e Z, mais os valores dos botões, para se pegar os valores dos eixos basta chamar as variáveis de mesmo nome em um objeto declarado como JoystickStates, lembrando que os valores dos eixos variam de 1000 a -1000, sendo que quando o analógico esta desativado os eixos X e Y recebem o direcional variando binariamente entre 1000, 0, -1000, sem variações no meio do caminho.
E para testar os valores dos botões existe a função IfButtom(int Buttom) que testa botão por botão, isso é, no parâmetro Buttom vc entra com o valor do botão que deseja adquirir (normalmente isso vem gravado no joystick) e ele te retorna um boleano informando se o botão esta pressionado (True) ou não (False).

Abaixo seque um exemplo de como utilizar:
1-) Abra e compile o código que esta como exemplo.

2-) Vc ira ver que dentro da pasta \bin\Debug na pasta do programa ira ter uma DLL, guarde o caminho pra esta DLL.

3-) Abra o seu programa ou um programa novo, no Solution Explorer click com o botão direto sobre o nome do seu programa como na figura abaixo e click na aba “Add Reference” (isso fará o VC# adicionar uma referencia de um outro programa em dotNet, no nosso caso, vamos adicionar aquela DLL que criamos)



4-) Na janela que abriu click na aba “Browse” e selecione a pasta do programa como na imagem abaixo, depois disso click na DLL e click em OK.




5-) Agora a DLL faz parte do programa, porem vc tem que chamá-la em todos as classes que vc for usa-la, e para isso nas primeira linhas digite o seguinte código:
using XnaMaua;

6-) Depois implemente um objeto na classe Game1 assim:
Joystick Controle;

7-) Depois na função Initialize() insira o código abaixo, isso fará com que o Joystick seja reconhecido pelo jogo.
Controle = new Joystick();

8-) Vá na função Update() e insira esta linha:
JoystickStates Controle1 = Controle.GetStates();

9-) Agora use o Objeto Controle1 para pegar os valores do Joystick como pro exemplo:
int eixoX = Controle1.X; int eixoY = Controle1.Y;

Marcadores: ,


  Um post de Mago Matematico
  As 14:56 no dia sexta-feira, 21 de setembro de 2007

  Deixe seu comentario tb, 0 já deixaram,


Todos direitos autorais reservados a Maua#®
Maua | BadNerds | Microsoft | Google