Jogos Livros Técnicos Palestras Links
Criando seus próprios jogos para XBox 360 - Parte 2

(Publicado na revista XBox 360 ano 2 número 18)

Esta é a segunda parte deste jogo, se você ainda não o fez, execute primeiro os passos da primeira parte!

Na parte 1 deste artigo, vimos como desenhar as sprites (imagens) do bastão e da bola, ainda fixas na tela. Vamos ver agora como controlar os bastões com o gamepad do Xbox 360 e como fazer a bola se movimentar!

Pronto?  Então, vamos lá!

1.Para movimentar os bastões, basta alterar a posição em que eles aparecem antes de desenhá-los. Para isso, primeiramente precisamos criar duas variáveis que vão guardar a posição dos bastões. Para isso, basta incluir no início da classe Game1 as linhas:


float posBastaoEsquerda = 320;
float posBastaoDireita = 320;

2. A seguir, precisamos  alterar o código de desenho para usar estas variáveis.  O método Draw da classe Game1 ficará, então, assim:


protected override void Draw(GameTime gameTime)
{
   // Pinta o fundo da tela de preto
   graphics.GraphicsDevice.Clear(Color.Black);
   // Desenha as texturas na tela
   spriteBatch.Begin();
   spriteBatch.Draw(texBastaoEsquerda, new Vector2(20, posBastaoEsquerda), Color.White);
   spriteBatch.Draw(texBastaoDireita, new Vector2(764, posBastaoDireita), Color.White);
   spriteBatch.Draw(texBola, new Vector2(400f, 300f), Color.White);
   spriteBatch.End();
   base.Draw(gameTime);
}
Estas linhas, agora, desenham a textura de cada bastão na respectiva posição X,Y da tela, sendo o X (distância horizontal a partir da esquerda da tela) fixo para cada bastão, e o Y (distância do topo da tela) controlado pelas variáveis que criamos.

3. Para alterar a posição dos bastões usando o gamepad, basta alterar o método Update para modificar o valor destas variáveis a partir do movimento dos thumbsticks direito ("right") e esquerdo ("left") do gamepad.  Alternativamente, podemos incluir comandos para alterar a posição dos bastões usando as quatro setas do teclado - um desafio de coordenação motora!  O código do método Update passa a ser, então:


protected override void Update(GameTime gameTime)
{
   // Allows the game to exit
   if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed
       || Keyboard.GetState().IsKeyDown(Keys.Escape))
       this.Exit();

   // Move os bastões - TECLADO
   KeyboardState meuTeclado = Keyboard.GetState();
   if (meuTeclado.IsKeyDown(Keys.Up))
        posBastaoEsquerda -= 10;
   if (meuTeclado.IsKeyDown(Keys.Down))
        posBastaoEsquerda += 10;
  if (meuTeclado.IsKeyDown(Keys.Left))
        posBastaoDireita -= 10;
   if (meuTeclado.IsKeyDown(Keys.Right))
        posBastaoDireita += 10;

   // Move os bastões - GAMEPAD
   GamePadState meuGamePad = GamePad.GetState(PlayerIndex.One);
   posBastaoEsquerda += meuGamePad.ThumbSticks.Left.Y * -10;
   posBastaoDireita += meuGamePad.ThumbSticks.Right.Y * -10;

   base.Update(gameTime);
}


No código acima, primeiramente “lemos” o estado do gamepad (que, lembrando, funciona também conectado ao PC); e a seguir atualizamos as variáveis que indicam a posição dos bastões, conforme o movimento do thumbstick da esquerda ou da direita. Como o valor do thumbstick varia de -1 (totalmente para baixo) até +1 (totalmente para cima), multiplicamos por -10 para que os bastões se movimentem até um máximo de 10 pixels por vez, e conforme o esperado (aumentando o Y para descer na tela, e vice-versa).

No uso do teclado é semelhante, com a diferença é que as setas vão movimentar os bastões sempre de 10 em 10 unidades, conforme cada tecla pressionada.

4. Para movimentar a bola, precisaremos criar duas variáveis: uma para armazenar a posição X e Y da bola, e a segunda para guardar a velocidade da bola, um valor a ser somando a cada "passo" do jogo às posições X e Y da bola. O XNA oferece um tipo de dados pronto para isso: Vector2. Assim, devemos criar as variáveis no início da classe Game1:


Vector2 posBola = new Vector2(400, 300);
Vector2 velBola = new Vector2(3, 3);

5. Em seguida, vamos incluir mais uma linha no método Update para alterar a posição da bola conforme a sua velocidade atual:


posBola += velBola;

6. E, por fim, basta alterar o código de desenho (no método Draw) para usar a variável da posição da bola:


protected override void Draw(GameTime gameTime)
{
   // Pinta o fundo da tela de preto
   graphics.GraphicsDevice.Clear(Color.Black);
   // Desenha as texturas na tela
   spriteBatch.Begin();
   spriteBatch.Draw(texBastaoEsquerda, new Vector2(20f, 320f), Color.White);
   spriteBatch.Draw(texBastaoDireita, new Vector2(764f, 320f), Color.White);
   spriteBatch.Draw(texBola, posBola, Color.White);
   spriteBatch.End();
   base.Draw(gameTime);
}


Rodando nosso programa agora, veremos que é possível controlar os bastões com os dois thumbsticks do gamepad, e veremos a bola se movimentar em diagonal na tela até sair – e isso escrevendo apenas 20 linhas de código!

Na revista XBox 360 número 19, de junho, veremos o código para rebater a bola nas paredes e nos bastões, praticamente terminando nosso jogo - só faltará a contagem de pontos !

Baixe o código completo desta coluna aqui.  E para consultar uma versão um pouco mais "profissional", onde é criada uma classe para gerenciar as sprites, veja este outro código.

E para saber mais sobre o XNA, consulte os slides na página de palestras!

Voltar