Upload
antonio-carlos-basso
View
215
Download
0
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