terça-feira, 21 de outubro de 2008

Tutorial - Nosso Primeiro Jogo 2D - Parte 2

Neste tutorial veremos, passo a passo, como criar um jogo 2D simples. Este tutorial foi baseado nos videos Begginers Guide 2D encontrados no site creators.xna.com.

Esta é a segunda parte do nosso tutorial de como criar um jogo 2D com o XNA Game Studio. Aqui veremos como criar uma nova classe para representar os outros objetos do nosso jogo. Com essa classe iremos carregar o canhão do navio no nosso projeto. Iremos também desenha-lo na tela e faze-lo girar com os comandos do teclado ou de um controle do xbox360.

Criando e Modificando a Classe GameObject

Vamos criar uma nova classe que representará os objetos do nosso jogo. Vamos clicar com o botão direito do mouse no nó que representa nosso projeto, o Belonave no Solution Explorer, clicando em Add->New Item..., selecionaremos o Template: Class na janela que aparece, daremos o Name: GameObject.cs e clicamos em Add.


Vemos que o XNA Game Studio criou para nós um arquivo praticamente vazio chamado GameObject.cs. Voltaremos então ao arquivo Game1.cs e bem no começo do arquivo temos os using. Iremos copiar todos os using de Game1.cs e coloca-los no lugar dos using que foram criados no GameObject.cs. Como cada objeto que criaremos em nosso jogo tem sua própria imagem, posição, rotação e centro, nós criaremos em nossa classe GameObject essas variáveis. A variável que representa a imagem do objeto será do tipo Texture2D e seu nome sprite, a que representa a posição do nosso objeto será do tipo Vector2 e seu nome position, assim a que representa a rotação do objeto será do tipo float e seu nome rotation e a que representa o centro da imagem é do tipo Vector2 e seu nome center.


Em seguida vamos declarar o construtor da nossa classe GameObject. O construtor é o método que chamamos ao criarmos um novo objeto. Em geral esse método inicializa tudo o que for necessário para a utilização do objeto. No caso do nosso construtor da classe GameObject, além de inicializarmos todos os seus parametros, ele irá receber uma Texture2D que será a imagem do objeto que desejamos desenhar na tela. Iniciaremos a posição como sendo zero, a rotação como sendo zero, atribuiremos a imagem que recebemos a nossa variável sprite e calcularemos o centro tendo esse as coordenadas metade da largura da imagem em X e metade da altura da imagem em Y.


Instanciando, Carregando e Desenhando o shipCannon

Agora vamos voltar ao Game1.cs. Logo abaixo de onde declaramos a backgroundTexture e o viewportRect vamos declarar nossa variável shipCannon, que será o canhão do nosso navio, e é do tipo GameObject.


Iremos inicializa-lo para podermos desenha-lo na tela do nosso jogo. No método protected override void LoadContent(), logo abaixo do Load<>() que fizemos para o backgroundTexture vamos instanciar o shipCannon como um novo GameObject que recebe um Load<>() da imagem do shipCannon e logo após isso vamos inicializar a posição do nosso canhão para posiciona-lo junto ao nosso navio desenhado no backgroundTexture.


Vamos ao método protected override void Update(GameTime gameTime) do Game1.cs, adicionaremos o código necessário para rotacionar o nosso canhão e assim podermos mirar nos nossos inimigos. Como vimos no nosso primeiro tutorial o método Update(GameTime gameTime) é o responsável por atualizar nosso jogo a cada quadro, é nele que codificamos todas as alterações de lógica que queremos fazer em cada objeto do jogo. Vamos adicionar primeiramente o código pare entrada do controle do xbox360 e após o código para entrada do teclado. Esses códigos farão nosso canhão rodar tendo seu centro como eixo. No caso do controle do xbox360, a rotação ocorre de acordo com a variação da alavanca para a esquerda e para a direita. No caso do teclado ocorre quando as teclas da direita ou da esquerda forem pressionadas. O código #if !xbox e #endif faz com que o trecho de código entre eles seja compilado em caso de atender a condição que no caso é ser diferente de xbox. O método Clamp() do MathHelper serve para limitarmos a rotação do nosso canhão.


Para desenharmos o canhão de nosso navio na tela, vamos ao método protected override void Draw(GameTime gameTime) mas não usaremos o mesmo Draw() do spriteBatch que usamos para o backgroundTexture, usaremos um overload do método que aceita outros argumentos. A versão que usaremos nesse caso recebe a imagem, a posição, o retangulo que é um argumento opicional, a cor, a rotação, a origem da rotação, a escala, efeitos e a profundidade.


Se não nos esquecemos de nada e nem cometemos nenhum erro podemos rodar nossa aplicação. Veremos o nosso navio já com seu canhão e esse atende as entradas do teclado e do controle do xbox360.


Resumo

Nesta a segunda parte do nosso tutorial de como criar um jogo 2D com o XNA Game Studio vimos como criar uma nova classe para representar os outros objetos do nosso jogo. Instanciamos essa classe e carregamos o canhão do navio no nosso projeto. Também o desenhamos na tela e o fizemos girar com os comandos do teclado ou de um controle do xbox360.

Na terceira parte do nosso tutorial de como criar um jogo 2D com o XNA Game Studio veremos como criar e desenhar os mísseis que o canhão do nosso navio irá disparar para acertar as aeronaves inimigas. Veremos também o conceito de array, como declarar uma constante e alguns tipos de loop que a linguagem C# nos oferece.


4 comentários:

Unknown disse...

ia um tempo que ñ entrava no Camelodromo....O Blog continua show, vou tentar ir acompanhando esse blog que passei a curtir..vlw


Erick Poiati

Anônimo disse...

nao encontro o tal class
so um xna file, um efect file, um sprite file e um search online templates o q faço

shady disse...

ta ando erro na hora de colocar canhao.pq acontece isso?

Michael Montalvão disse...

Muito bom o tutorial, só acho que faltou explicar um pouco melhor cada parametro dos método, pelo menos os principais, e algums conceitos e dicas.
PS: Não leve a mal, só é o que eu senti que me fez falta.