Você está na página 1de 10

Para o melhor entendimento deste material necessrio que o leitor tenha conhecimentos prvios de C# e de orientao a objetos.

. Como bom RPGista que sou, sempre gostei de jogos e ainda tenho a vontade de criar os meus, para tanto j tinha at iniciado meus estudos em Allegro[1] , o que no foi assim to amigvel. Eu no tive tempo de concluir o meu primeiro experimento em allegro por causa da semana de provas na universidade, sem falar do retorno do grupo de estudos de .NET e do trabalho, resolvi ento retomar o estudo dos jogos unindo o til ao agradvel, o grupo de .NETe o Framework para desenvolvimento de jogos da Microsoft, o XNA. Comecei ento a pesquisar a respeito, primeiro as definies formais, as novidades, porque usar e por fim, a parte mais prazerosa que montar um jogo de exemplo. Ento, sem mais delongas, vamos a introduo ao XNA, espero que este texto seja til para outras pessoas. O que XNA? Bom, como todo framework, o XNA uma plataforma para desenvolvimento que visa facilitar em algum nvel o desenvolvimento de aplicaes, no caso os jogos. Por exemplo, ao desenvolver jogos, o programador precisa criar, dentre outras coisas, um loop principal, onde ficam as etapas bsicas que todo jogo deve ter, como carregamento de recursos, atualizao dos dados do mundo do jogo, desenho das cenas com as modificaes e descarga de recursos, isso o XNA j traz para voc. Sem falar que dependendo dos recursos usados o mesmo jogo produzido para PC pode rodar em outras plataformas (como o XBOX). Resumindo, como muitas iniciativas da Microsoft o XNA visa facilitar em muita coisa o desenvolvimento de jogos. Mas, deixemos de bla-bla-bla e vamos prtica. Voc pode encontrar maiores informaes no endereo: http://msdn2.microsoft.com/en-us/xna/default.aspx O software necessrio para reproduzir este tutorial: - Visual C# Express - Visual Game Studio 1.0 Voc pode baixar ambos do site da Microsoft. Comeando o projeto.

Para iniciar o estudo, vamos criar um projeto do tipo Windows Game, quando aparecer o cdigo do template ns vamos apagar e recomear o nosso cdigo, assim vamos entender melhor o que cada parte do cdigo faz. Para tanto v at File -> New Project e depois escolha Windows Game. No Solution Explorer (onde aparecem os componentes do projeto) vo aparecer dois arquivos Program.cs e Game1.cs, apague os dois, eles contem cdigo pronto para uma estrutura bsica do jogo, ns vamos criar o nosso cdigo. Agora adicione um arquivo em branco onde ns vamos comear a criar o nosso projeto, para tanto, clique com o boto direito dentro do Solution Explorer no nome do projeto e v at a opo Add e depois New Item e selecione Class, d um nome ao arquivo e pronto. A estrutura do jogo. Como eu j havia citado antes, a maioria dos jogos possui alguns elementos comuns em suas estruturas de controle, como um loop geral, um local para carregamento de recursos, um para atualizao do mundo, um para descarga e outro para desenho. No XNA a classe Game fornece essa estrutura. Vamos ao cdigo: Primeiro vamos adicionar os namespaces necessrios para a estrutura do jogo, no caso para poder usar a classe Game do XNA.
using System; using Microsoft.Xna.Framework;

Agora vamos herdar da classe Game uma nova classe que vai conter a estrutura do nosso jogo:
//o cdigo da classe jogo, herdado da classe pai "Game"

class jogo : Game

{ //construtor da classe public jogo() { } }

Repare que eu apenas criei a classe, herdando os membros da classe Game e depois criei um construtor que ainda est vazio. Agora, o cdigo da rotina principal da aplicao:
class novo_jogo { static public void Main() //mtodo principal da aplicao { jogo teste = new jogo(); teste.Run(); } }

Com esse cdigo j ser criada uma janela para a nossa aplicao, mas, nada foi feito ainda. Vale ressaltar que agora usaremos a estrutura herdada da classe game na nossa aplicao, ela nos fornece um loop principal para o jogo, cuida da inicializao dos dispositivos e prov alguns mtodos que ns iremos sobrescrever para criar a lgica do nosso jogo. Agora vamos aos mtodos da classe game que sero utilizados na nossa estrutura:

Draw

Chamado quando o jogo determina seu tempo especfico de renderizao. Iremos sobrescrever esse mtodo para criar nossas rotinas de desenho das imagens.

Initialize

Chamado depois que Game e GraphicsDevice so criados, mas, antes deLoadGraphicsContent.

LoadGraphicsContent

Chamado quando os recursos grficos precisam ser carregados, iremos sobrescrever esse mtodo para carregar nossas imagens.

UnloadGraphicsContent Chamado quando os recursos grficos precisam ser descarregados. Update Chamado quando a lgica do jogo precisa ser atualizada, aqui criaremos as rotinas que mantero nosso mundo atualizado.

Eu fiz uma traduo rasteira da documentao do XNA no Msdn, portanto perdoem os erros de traduo. Logicamente, fiz uma reescrita no texto explicativo para adapta-lo as necessidades deste documento. Configurando o ambiente. Agora precisamos configurar o nosso jogo de acordo com o ambiente onde ele est rodando, coisas como resoluo, cores, etc. Para fazer isso, vamos modificar o cdigo da nossa classe jogo, deixando-o da seguinte forma:
class jogo : Game {

//permite a configurao do ambiente GraphicsDeviceManager config_am; //construtor da classe public jogo() { config_am = new GraphicsDeviceManager(this); } }

Repare que depois disso at a cor de fundo da nossa aplicao j recebe um valor default. :-D Agora adicione os seguintes namespaces:
using System; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Content; using Microsoft.Xna.Framework.Graphics;

E finalmente podemos cuidar do cdigo para carregar e exibir a imagem.

Primeiro, vamos adicionar um ContentManager que usado para gerenciar nossos recursos (os arquivos de texturas, por exemplo) e depois vamos instancia-lo no nosso construtor.
class jogo : Game { //permite a configurao do ambiente GraphicsDeviceManager config_am; //gerenciador dos recursos ContentManager recursos; //construtor da classe public jogo() { config_am = new GraphicsDeviceManager(this); recursos = new ContentManager(Services); } }

Agora, antes de carregar propriamente os recursos, vamos adicionar a imagem da textura ao nosso projeto, para tanto, criamos uma pasta no Solution Explorer com o nome imagens e depois adicionamos o arquivo contendo a textura aqui chamado de bola.jpg

Agora clique com o boto direito na imagem e depois em Properties e procure pela propriedade Asset Name, ela ser usada para referenciar a imagem dentro do projeto. No caso desse documento, o Asset Name usado bola. A Classe Game do XNA chama automaticamente o mtodo LoadGraphicsContent para carregar os recursos, como estamos herdando dessa classe, vamos aproveitar esse mtodo para carregar as nossas texturas, para fazer isso, vamos sobrescreve-lo.
//mtodo para carregar a textura. protected override void LoadGraphicsContent(bool loadAllContent) { if (loadAllContent) { textura = recursos.Load<Texture2D>(@"imagens\bola"); } }

Nele testamos se os recursos j foram carregados atravs do parmetro LoadAllContent e depois carregamos o que for necessrio. Repare que usamos o objeto recursos que o nosso gerenciador de recursos e que foi instanciado no construtor da classe, nele chamamos o mtodo Load que informando o tipo de objeto que vamos carregar (no caso uma textura 2D) e por final passamos uma string com o asset name da imagem, como criamos uma pasta para a imagem, devemos preceder o nome com a pasta, o arroba usado para passar a string do jeito que est desprezando os caracteres especiais. Pronto, agora passaremos a imagem para um sprite e depois mostraremos ela na tela.

A Classe Game do XNA tambm possui um mtodo DRAW que chamado automaticamente e que serve para incluir o cdigo onde os objetos so desenhados, iremos sobrescrever esse mtodo na nossa classe, para desenhar a nossa imagem. Mas, antes vamos adicionar um objeto SpriteBatch a nossa classe que vai servir para desenhar de fato a imagem e depois vamos instancia-lo, tambm vamos adicionar um objeto vector2 que chamaremos de posicao e que ser a posio do desenho na tela. O cdigo da nossa classe ficar assim:
//o cdigo da classe jogo, herdado da classe pai "Game"

class jogo : Game { //permite a configurao do ambiente GraphicsDeviceManager config_am; ContentManager recursos; //texturas Texture2D textura; //sprite SpriteBatch sprite; //struct para posio, inicializado no zero (x = 0 e y = 0) Vector2 posicao = Vector2.Zero; //construtor da classe public jogo() { config_am = new GraphicsDeviceManager(this); recursos = new ContentManager(Services); } //mtodo para carregar a textura. protected override void LoadGraphicsContent(bool loadAllContent) { if (loadAllContent) { textura = recursos.Load<Texture2D>(@"imagens\bola");

sprite = new SpriteBatch(config_am.GraphicsDevice); } } protected override void Draw(GameTime gameTime) { sprite.Begin(); sprite.Draw(textura, posicao, Color.White); sprite.End(); } }

Repare nas linhas em que instanciamos o objeto sprite e depois no mtodo Draw onde desenhamos efetivamente o sprite na tela. Pronto, por agora j o bastante, na prxima etapa do tutorial eu mostrarei como movimentar os objetos.

Você também pode gostar