Criando Jogos Com o XNA Game Studio

Embed Size (px)

Citation preview

  • 7/22/2019 Criando Jogos Com o XNA Game Studio

    1/9

    Criando Jogos com o XNA Game Studio

    A Microsoft est desenvolvendo, ainda em fase beta, o XNA Framework e oXNA Game Studio Express. O XNA Framework um framework de classes

    para manipulao de recursos do DirectX para a criao de jogos e outrostipos de aplicaes grficas.

    O XNA Framework roda em windows e utilizado no XBOX 360, sendo quefuturamente rodar tambm em plataformas mveis.

    O XNA Framework substitui o Managed DirectX e suas classes utilizamdiretamente o DirectX Runtime.

    Veja os namespaces do XNA pelo object browser :

  • 7/22/2019 Criando Jogos Com o XNA Game Studio

    2/9

    O XNA Game Studio Express, por sua vez, a ferramenta utilizada para acriao de jogos com o XNA Framework. baseado no C# Express, dependeda instalao do C# Express - precisa ser o express, no aceita outrasverses do visual studio. De fato, o XNA Game Studio Express apenasadiciona templates para a criao de jogos.

    A verso Express do Game Studio ser gratuita mesmo depois de lanada averso final, porm desenvolver jogos apenas para Windows.

    J a verso professional do Game Studio ser comercial e permitir odesenvolvimento de jogos para o XBOX 360

    Vamos ver, passo-a-passo, a criao de um jogo bem simples para vermos ofuncionamento do XNA Game Studio Express. Veja a imagem do jogo queiremos gerar :

  • 7/22/2019 Criando Jogos Com o XNA Game Studio

    3/9

    1) Criar o novo projeto de nosso jogo

    2) Alterar as propriedades do objeto Graphics para definir o tamanho da tela

  • 7/22/2019 Criando Jogos Com o XNA Game Studio

    4/9

    3) Definir as variveis que sero necessrias para montar a tela do jogo

    (o jogador, uma bola e um objeto spriteBatch, responsvel pela montagem datela)

    Texture2D Jogador, Bola;SpriteBatch sprite;

    4) Inserir as 2 imagens no projeto

    5) Criar um mtodo para inicializar as imagens

    Precisamos carregar as imagens para a memria. Isso feito pelo mtodoFromFile do objeto Texture2D. Tambm precisaremos inicializar o SpriteBatch.

    Em todos esses casos precisaremos fornecer um GraphicsDevice. O objetoGraphics que j existe na classe Game1.cs nos fornece o GraphicsDevice,facilitando as coisas.

    voidInicializar()

    {

    Jogador = Texture2D.FromFile(graphics.GraphicsDevice,

    "../../paddle.png");

    Bola = Texture2D.FromFile(graphics.GraphicsDevice,

    "../../ball.png");

    sprite = new SpriteBatch(graphics.GraphicsDevice);

    }

    6) Disparar o mtodo inicializar.

    Precisamos disparar nosso mtodo inicializar em 2 locais diferentes :Primeiramente no mtodo OnStart de nossa classe, que ocorre no momentodo inicio do jogo. Alm disso precisaremos fazer a inicializao novamentesempre que ocorrer o evento DeviceReset do objeto GraphicsDevice.

    Observe que a carga das imagens e criao do SpriteBatch esto ligados aoGraphicsDevice. Desta forma, quando ocorre o DeviceReset necessriorefazer a inicializao.

    protectedoverridevoidOnStarting()

    {

    base.OnStarting();

    graphics.GraphicsDevice.DeviceReset += GraphicsDevice_DeviceReset;

    Inicializar();

    }

    voidGraphicsDevice_DeviceReset(objectsender, EventArgse)

    {

    Inicializar();

    }

    7) Criar a classe representando o jogador

  • 7/22/2019 Criando Jogos Com o XNA Game Studio

    5/9

    Essa classe ir controlar a posio do jogador e a velocidade do jogador nojogo (velocidade sendo contada em pixels.

    usingSystem;

    usingSystem.Collections.Generic;

    usingSystem.Text;

    usingMicrosoft.Xna.Framework;

    namespaceBolinha

    {classJogador

    {

    Point posicao;

    intvelocidade;

    publicJogador(intx, inty)

    {

    posicao = newPoint(x, y);

    velocidade = 3;

    }

    }

    }

    8) Criar a classe representando a bola

    Assim como a classe do jogador, a classe representando a bola guarda aposio e velocidade da bola. Nesse caso, porm, temos duas velocidades : Avelocidade de movimentao horizontal e a velocidade de movimentaovertical.

    usingSystem;

    usingSystem.Collections.Generic;

    usingSystem.Text;

    usingMicrosoft.Xna.Framework;

    namespaceBolinha

  • 7/22/2019 Criando Jogos Com o XNA Game Studio

    6/9

    {

    classBola

    {

    publicPoint posicao;

    publicintvelocidadeH;

    publicintvelocidadeV;

    publicBola(intx, inty)

    {

    posicao = newPoint(x, y);

    velocidadeH = 3;

    velocidadeV = 3;

    }

    }

    }

    9) Declarar variveis para a bola e o jogador

    Vamos declarar essas variveis em nossa classe do jogo. O disparo ser feitono constructor, veja :

    voidIniciarClasses()

    {

    if(objJogador==null) {

    objJogador=newJogador(400,550);

    objBola=newBola(200,50);

    }

    else

    {

    objJogador.posicao =newPoint(400,550);

    objBola.posicao = newPoint(200,50);

    }}

    publicGame1()

    {

    InitializeComponent();

    IniciarClasses();

    }

    Observe como o IniciarClasses testam para verificar se o objeto null. Destaforma pode ser utilizado no inicio do jogo mas tambm para reinicia-lo.

    10) Agora iremos fazer o desenho da tela do jogo. Isso feito dentro domtodo Draw, que j existe no arquivo Game.cs

    No mtodo Draw existe uma marca TODO: que exatamente ondedeveremos codificar a montagem na tela. Utilizamos o sprite para fazer amontagem da tela, realizamos um Begin, desenhamos os objetos e fazemosum End.

    // TODO: Add your drawing code here

    sprite.Begin( SpriteBlendMode.AlphaBlend );

    sprite.Draw(imgJogador,new

    Rectangle(objJogador.posicao.X,objJogador.posicao.Y,imgJogador.Width,imgJogador.Height), Color.White);

  • 7/22/2019 Criando Jogos Com o XNA Game Studio

    7/9

    sprite.Draw(imgBola,new

    Rectangle(objBola.posicao.X,objBola.posicao.Y,

    imgBola.Width,imgBola.Height), Color.White);

    sprite.End();

    11) J hora de comearmos a reconhecer a movimentao do teclado dojogador. Para isso vamos criar um mtodo, EntradaTeclado.

    O objeto KeyBoard, do XNA Framework, nos permite obter o estado atual doteclado. Com o estado atual do teclado podemos utilizar o mtodoGetPressedKeys para obter as teclas pressionadas. Realizamos ento um laopelas teclas que foram pressionadas e fazemos o correspondenteprocessamento.

    Veja como fica o cdigo :

    voidEntradaTeclado()

    {

    currentState = Keyboard.GetState();

    Keys[] currentKeys = currentState.GetPressedKeys();

    //check for up and down arrow keys

    foreach(Keyskey incurrentKeys)

    { if(key == Keys.Left)

    objJogador.posicao.X -=objJogador.velocidade;

    if(key == Keys.Right)

    objJogador.posicao.X +=objJogador.velocidade;

    if(key == Keys.Escape)

    this.Exit();

    }

    }

    12) Chamar o teste de movimentao.

    Nossa classe possui um mtodo Update. Esse mtodo o responsvel pelacontinuidade do jogo, por estar executando a atividade do jogo em pequenosintervalos. Neste mtodo Update encontramos uma marca TODO: e nesteponto deveremos chamar o mtodo EntradaTeclado.

    if(objJogador.posicao.X(800 - (imgJogador.Width +5)))

    objJogador.posicao.X=(800 - (imgJogador.Width +5));

  • 7/22/2019 Criando Jogos Com o XNA Game Studio

    8/9

    13) hora de comearmos a controlar a movimentao da bola. Vamos criarum mtodo chamado MoverBola para fazer a movimentao da bola e checarse a bola encontra-se dentro dos limites da janela.

    voidMoverBola()

    {objBola.posicao.X+=objBola.velocidadeH;

    objBola.posicao.Y+=objBola.velocidadeV;

    if((objBola.posicao.X=(800 -

    imgBola.Width)))

    objBola.velocidadeH *=-1;

    if((objBola.posicao.Y=(600-imgBola.Height))

    IniciarClasses();

    }

    Observe que se a bola estiver passando dos limites ns multiplicamos avelocidade por -1. Isso ir inverter a direo. Desta forma as variveis develocidade na classe bola indicam no s a velocidade mas tambm a direoda bola.

    Se a bola passar pelo limite inferior da tela, trata-se de uma perda e o jogo reiniciado.

    14) Vamos chamar o mtodo MoverBola de dentro do mtodo Update, noTODO

    15) Criar um mtodo, AcertouBola, para identificar quando o jogadorconsegue acertar a bola.

    voidAcertouBola()

    {

    if(objBola.posicao.Y>= (objJogador.posicao.Y - imgBola.Height))

    if((objBola.posicao.X>=(objJogador.posicao.X -

    imgBola.Width))&&(objBola.posicao.X

  • 7/22/2019 Criando Jogos Com o XNA Game Studio

    9/9

    if(objBola.posicao.Y>= (objJogador.posicao.Y - imgBola.Height))

    if((objBola.posicao.X>=(objJogador.posicao.X -

    imgBola.Width))&&(objBola.posicao.X0)

    objBola.velocidadeH +=1;

    else

    objBola.velocidadeH -=1;

    if(objBola.velocidadeV>0)

    objBola.velocidadeV +=1;

    else

    objBola.velocidadeV -=1;

    Acertos=0;

    }

    }

    }

    Concluso

    O jogo j est funcionando. Mas este mtodo de construo utilizoudesenvolvimento estruturado. O desenvolvimento estruturado no muitorecomendvel, pois a lgica de cada objeto do jogo fica espalhada emdiversos locais do jogo.

    O ideal que o jogo seja desenvolvido de forma orientada a objetos,centralizando a codificao de cada objeto do jogo em um nico ponto. Noprximo artigo veremos um pouco mais sobre isso.

    Veja alguns exemplos do que no est bom nesta codificao :

    O controle das imagens e desenho das imagens no jogo no feito pela

    prpria classe do objeto.

    A movimentao da bola e todos os clculos envolvidos no esto dentro daclasse bola

    O controle de coliso no est em uma das classes de objeto.

    Desta forma o cdigo do jogo pode ser bem melhorado, isso que fizemos noartigo que voc encontra emhttp://www.devaspnet.com.br/colunas/coluna0130.aspx