segunda-feira, 2 de julho de 2012

[Tutorial] [XNA] Jogo de Plataforma - Parte 2

Olá caros friends, em nosso último tutorial da série Jogo de Plataforma, abordamos alguns princípios básicos sobre plataforma adotando como exemplo o jogo do famoso Super Mario. Além disso, desenvolvemos a classe Camera2D que se movimenta junto com o personagem do jogo.

Neste parte do tutorial desenvolveremos a classe Animacao. Como podemos observar em qualquer jogo de plataforma, durante a movimentação do jogador e objetos pela tela, sempre é uma espécie de conjunto de animações, como por exemplo, animação para o personagem andar, correr, pular, etc. Sendo assim, a classe que desenvolveremos será responsável por criar nossos frames de animação e animá-los caso haja necessidade.

Inicialmente, crie uma nova classe no projeto, com o botão direito do mouse clique no nome do seu projeto localizado no Solution Explorer, depois no submenu Add, e por fim Class. Dê o nome Animacao para classe e clique em okay.


Antes de começar o desenvolvimento da classe, vamos analisar seus termos técnicos para que possamos identificar seus atributos e métodos dentro do jogo. Toda animação possui uma certa quantidade de quadros de desenho, um tempo de transição de um desenho para o outro e a instrução de repetição, caso exista. Por tanto identificamos três atributos da nossa classe:

  1. Quadros da Animação - Todos os desenhos que compõem ela.
  2. Quantidade Total de Quadros.
  3. Tempo de Intervalo - Tempo de transição de um quadro para o outro.
  4. Repetição - Se a animação fica ou não repetindo.

Nessa classe trabalharemos com Rectangles, que em termos computacionais, é preciso de um dispositivo gráfico para renderiza-los. Para isso faramos referência ao framework do XNA. Indicado abaixo:

using Microsoft.XNA.Framework;
using Microsoft.XNA.Framework.Graphics;

Pois bem, agora podemos começar o desenvolvimento da classe Animacao. Dentro do bloco:

public class Animacao
{
     // Digitar todo o código da classe aqui.
}


Começaremos a declaração dos atributos identificados anteriormente para a nossa classe. Todos atributos serão privados somente para a Animacao, entretanto, podemos modificar seus valores, para isso serão criados os métodos get/set para cada um dos atributos.


// Lista que contém os quadros da Animacao
private List<Rectangle> quadrosAnimacao = new List<Rectangle>();
// Método para obter essa lista quando necessário
public List<Rectangle> QuadrosAnimacao { get { return this.quadrosAnimacao; } }


// Tempo de intervalo de transição dos quadros da Animacao
private float intervalo = 0.10f
// Métodos para obter e setar o intervalo quando necessário
public float getIntervalo() { return this.intervalo; }
public void setIntervalo(float _intervalo) { this.intervalo = _intervalo; }


// Define se existe repetição na Animacao
private bool existeLoop = false;
// Métodos para obter e setar a existência de repetição
public bool getExisteLoop() { return this.existeLoop; }
public void setExisteLoop(bool _loop) { this.existeLoop = _loop; }


// Define a quantidade total de frames da Animacao
private int quadrosTotal = 0;

Prontinho muchachos, criamos os atributos e os métodos para controlar esses atributos dentro da classe. Bom, como agora já temos os atributos, faltam os métodos da classe. Para um animação só existe o método construtor, que vai construir a animação e deixa-la armazenada na memória, e ela será acionada conforme instruções que receber do objeto a ser animado.

// Método que constrói nossa Animacao
// é enviado para esse método uma lista de quadros
// com inicio, e total de quadros dela
public Animacao(List<Rectangle> quadros, int inicio, int total)
{
     // Define a quantidade de quadros da Animacao
     this.quadrosTotal = total;


     // Adiciona cada quadro que foi recebido a lista de quadros da Animacao
     for (int i = inicio; i < (inicio + total); i++)
     {
          this.quadrosAnimacao.Add(quadros[i]);
     }
}

E ai está nossa classe Animacao, prontinha direto do forno ( HUHAUHA ) para ser utilizada. Entretanto guardaremos ela, pois para se ter uma animação é preciso um objeto, que em nosso caso, não temos ainda. Conforme os tutoriais forem evoluindo, todas as classe serão diretamente conectadas umas as outras. Aguardo todos em nosso próximo tutorial. ( Como de costume nosso gif básico HUAUHAUHAHU )


2 comentários:

  1. delicia de tutorial, valeu por nos ajudar e compartilha seu conhecimento. obrigado.

    ResponderExcluir