GameDev #6: Conhecendo o XNA – Mergulhando nas suas Camadas

em 20/12/2009

No nosso último encontro aqui na coluna GameDev do Nintendo Blast tivemos uma visão geral da principal iniciativa da indústria para... (por Jones Oliveira em 20/12/2009, via Nintendo Blast)

banner_gamedev

No nosso último encontro aqui na coluna GameDev do Nintendo Blast tivemos uma visão geral da principal iniciativa da indústria para incentivar desenvolvedores independentes – o XNA. Falamos brevemente das suas vantagens e facilidades. No artigo de hoje faremos muito mais do que dar uma “espiadinha” no XNA – mergulharemos em sua estrutura, mostrando porque é tão fácil desenvolver em XNA.

A profissão de desenvolvedor de softwares nunca foi fácil – além da responsabilidade que se tem dos deveres do dia-a-dia, ainda há a cobrança de se manter sempre atualizado e, pior ainda, ser responsável pela evolução da arte de criar e desenvolver soluções. Desde o princípio o desenvolvedor tem que lidar com a teimosia do seu principal companheiro de trabalho, que mais atrapalha do que ajuda – o computador.

360182_8531 Nos primórdios havia a luta constante contra a incapacidade de processamento e armazenamento das máquinas – como desenvolver uma solução atraente e que atendesse às necessidades do mercado com tão pouco? Se não haviam condições de desenvolver simples processadores de texto, quem diria desenvolver jogos! Aliás, como já vimos no nosso segundo artigo, isso era algo considerado perca de tempo (leia-se dinheiro).

Porém, a constante insatisfação do ser-humano nos fez evoluir. Aos poucos os computadores (e a tecnologia) deixaram de atrapalhar e passaram a ajudar aqueles que trabalham com eles, se assim se pode dizer. Hoje temos computadores potentes o suficiente para, por exemplo, desenvolver produções cinematográficas de qualidade considerável e jogos extremamente interessantes.

Porém essa evolução não foi apenas uma questão de hardware, mas também de software. Afinal de contas, de que adiantaria ter uma máquina potente se tivéssemos que continuar desenvolvendo em tela preta como antigamente?

Naturalmente surgiram ferramentas que facilitaram também o desenvolvimento de todo tipo de solução – inclusive de jogos. Como falamos no artigo anterior, existem inúmeras iniciativas que tornam mais fácil, prazerosa e divertida essa árdua tarefa. Dentre essas iniciativas talvez a mais importante seja a da Microsoft com o XNA. Mas porque?

 

Seja Bem-vindo ao mundo do XNA!

xna_logo O XNA é uma das principais iniciativas da indústria dos games em tornar mais simples todo o complexo processo de desenvolvimento de jogos. Apesar de ser encabeçado pela Microsoft, o XNA foge completamente do tradicional modelo de negócios da gigante de Redmond – todas as ferramentas para se desenvolver em XNA são gratuitas, não é cobrado um tostão para desenvolver para PC, para XBOX 360 e Zune; e muito, mas muito pouco mesmo, para distribuir seus jogos na Live.

directx-logo Apesar do XNA ser recente (lançado oficialmente em 2006), sua ideia já vem sendo desenvolvida desde 1995 quando a Microsoft lançou a primeira versão do DirectX com o Windows 95, passando pelo MDX (Managed DirectX) até os dias de hoje com o XNA.

image

A utilização de APIs permite que programas utilizem serviços de outros sem que aqueles se envolvam com os detalhes da implementação dos serviços deste. Trazendo para o nosso contidiano, é como se você tivesse uma empresa e de repente não quizesse se preocupar com a parte de serviços gerais e contrata-se uma empresa terceirizada para realizar tal atividade.

O XNA agregou todas as APIs do DirectX e do MDX e ainda teve outras APIs desenvolvidas única e exclusivamente para ele, tornando a utilização das APIs do DirectX e MDX mais fáceis ainda!

Imagine que, assim como na sua empresa que terceirizou a mão de obra para serviços gerais, você deverá apenas se preocupar em dizer ao XNA como o “serviço” deverá ser executado, sem se preocupar como eles estão sendo pagos, se suas carteiras de trabalho estão assinadas e porai vai. Apenas diga como as coisas deverão ser feitas que o XNA se encarregará de fazer o resto.

 

O XNA Framework e suas camadas

Na visão geral que demos no nosso último artigo, vimos os principais componentes do XNA e vimos que é o XNA Framework o principal responsável por tornar todo o trabalho mais simples. Vimos também que o framework nos liberta da “parte chata” de desenvolver aplicações, jogos e soluções, contudo não vimos e não explicamos que para tornar todo esse trabalho mais simples o Framework se divide em várias camadas, cada uma com seus componentes, responsáveis por atividades específicas.

Dessa forma, o XNA Framework possui as seguintes camadas:

 

xna_layers

Jogos

Racing-Game Na camada de Jogos encontraremos os starter kits que são mini-jogos e aplicações prontos para utilização e extensão – ou seja, servem tanto como destino final ou ponto de partida para serem expandidos, desenvolvidos. Há um grande número de starter kits disponíveis e vários outros sempre surgirão no XNA Creators Club.

Ainda na camada de jogos, o desenvolvedor será o responsável por escrever as linhas de código do jogo e também por todo o seu conteúdo – desde os sons e efeitos sonoros do jogo até às textures e modelos 3D, os quais são todos importados de outras aplicações para o XNA Game Studio. Ainda há os componentes que são desenvolvidos pela comunidade e disponibilizados via download para que qualquer um possa se utilizar deles e modificá-los.

 

Extensão

Na camada de extensão do XNA Framework temos dois importantes componentes da nossa ferramenta – o Modelo de Aplicação e o Content Pipeline. Juntos, eles são os principais responsáveis por tornar o trabalho dos desenvolvedores mais fácil.

O Modelo de Aplicação é o responsável pela criação e gerenciamento de janelas do jogo – é ele quem executa a inicialização do DirectX e dos componentes 3D, de áudio, input etc do DirectX. Além disso ele é o responsável por gerenciar o loop (ciclo) da execução do jogo. Pensemos no fluxograma de um jogo simples (figura abaixo) e se analisarmos bem, perceberemos que, uma vez dentro do jogo em si, ficamos dando voltas e voltas até alcançarmos o objetivo que nos levará ao final do jogo. Pois bem, é o Modelo de Aplicação que gerencia tudo isso – ele é o responsável por “escutar” nossas ações dentro do jogo para verificar o que estamos fazendo, o que deverá ser feito a partir do que já fizemos, verificar se já alcançamos tais objetivos para “destravarmos” uma área do jogo e, finalmente, se cumprimos todos os requisitos para finalizarmos o jogo.

imageAinda sobre o Modelo de Aplicação, quando criamos um novo projeto de jogo, ele já nos provê as primeiras linhas de código, com comentários que nos ajudarão a entender a lógica da estrutura do XNA e do nosso jogo.

Content_Pipeline O Content Pipeline é o componente que nos fornece as ferramentas para processar todo o conteúdo que fará parte do nosso jogo. Ele é o responsável por lidar com as texturas, com os modelos 3D, com as definições de som etc. Ainda é responsável por otimizar todos os conteúdos que são importados para o nosso jogo. Graças a ele os desenvolvedores utilizam cada vez menos linhas de código para lidar com processamento de conteúdo no jogo, algo que geralmente dá bastante dor de cabeça.

É o Content Pipeline também o responsável por importar os mais diversos tipos de conteúdo dos mais diversos fabricantes por meio dos Importers e exportá-los para arquivos binários que serão utilizados nos jogos por meio dos Exporters.

 

Núcleo

Como o próprio nome já diz, é a principal camada do XNA Framework. Os seus componentes nos fornece recursos para as mais diversas ações do jogo.

Graphics: Skinning and Animation O Graphics nos fornece capacidade de renderização de baixo nível, rodando tudo em cima do Direct3D 9. Dentre os seus inúmeros recursos, podemos destacar os de model, mesh, bones, texturas e o de efeitos e shaders (pois é, você poderá trabalhar com shaders no XNA!). O componente Graphics ainda oferece o recurso BasicEffects que facilita a apresentação de objetos 3D na tela e o SpriteBatch para a manipulação de gráficos 2D e partículas.

Graphics: 3D Particles Já os componentes de Audio do XNA são todos baseados no XACT, que permite que projetistas e programadores de áudio trabalhem de forma colaborativa com os desenvolvedores. Imagine que é como se você tivesse um interprete capaz de integrar duas equipes de mecânicos que nunca se viram, não falam o idioma uma da outra e cada uma trabalha do seu jeito.

InputMappingDsl[4] Os componentes de Input são os responsáveis por toda a obtenção de entrada de dados dada pelo usuário no momento do jogo. É ele que ficará “ouvindo”, por exemplo, os botões que você aperta no controle e direcionará o fluxo dessa informação para a execução de uma determinada ação. No XNA já há o suporte nativo para teclados, mouses, Gamepad do XBOX 360, além de guitarra, tambores, volantes e pedais!

Graphics: Distortion O componente Math oferece uma vasta gama de cálculos e funções matemáticas pré-definidas para se trabalhar com colisão, movimentação, física e definição de vetores, matrizes, planos, espeferas e tudo o mais relacionado à matemática.

Já o componente Storage provê uma maneira fácil de ler/escrever dados e salvamento de jogos, além de suportar múltiplos dispositivos de armazenamento e perfis no XBOX 360.

Graphics: Shatter EffectPor último, mas não menos importante, o componente Network torna muitíssimo mais fácil o desenvolvimento do jogo para o ambiente online, oferecendo maneiras simples de conectar o seu jogo entre XBOX 360 e PC, conexões locais em uma LAN ou diretamente na LIVE! ou quem sabe entre até 8 Zunes! O componente de network é um dos mais poderosos e mais promissores do XNA, já que a proposta de se desenvolver um jogo para o mundo online já é um desafio por si só.

 

Finalizando

A última camada do XNA Framework, a Plataforma, é aquela sob qual todos os componentes que apresentamos até aqui estão baseados – sem essa plataforma nada disso seria possível – todos eles se utilizam, de alguma maneira dos componentes dessa camada!

Vimos que para tudo, ou quase tudo, o XNA tem uma solução simples o suficiente para não desestimular o desenvolvedor logo nos primeiros passos de sua aventura no mundo dos games. Por experiência própria – desenvolver em XNA não é difícil! É divertido! Claro, a qualidade do jogo que você quer desenvolver vai depender da sua ambição, tempo e dedicação. O fato é que o XNA é produtivo SIM!

Abdux Existem vários exemplos de jogos desenvolvidos em XNA que foram feitos em 4 dias por uma pessoa só! É o caso do AbduX (desenvolvido pelo brasileiro André Furtado) e do Dungeon Quest (esse desenvolvido por 2 pessoas – 1 desenvolvedor e 1 designer).

Dungeon Quest Devido a sua facilidade e a produtividade que proporciona àqueles que estudam e trabalham com ele, o XNA vem cada vez mais sendo adotado nas universidades brasileiras, como a UFPE, PUC-Rio, Unicamp e Unip! A plataforma é bastante promissora e a todos aqueles gamers que um dia sonharam em estar do outro lado do jogo, na sua produção, vale à pena investir tempo e dedicação para aprende-la e, quem sabe, alçar vôos maiores porai a fora!

Fechamos no artigo de hoje a breve segunda parte da nossa coluna GameDev do Nintendo Blast – nela apresentamos a proposta do XNA e explanamos, de maneira teórica, a sua organização, funcionalidades, camadas e componentes. A partir do próximo artigo começaremos o hands-on da nossa coluna, dando início ao trabalho com a Linguagem de Programação, o Visual Studio e o XNA Game Studio. Começaremos a escrever as primeiras partes do nosso jogo em XNA. Espero que tenhamos conseguido apresentar de maneira clara todas as vantagens do XNA e convence-los de que ele é uma ferramenta poderosa e extremamente amigável para os nossos estudos! Nos vemos na próxima coluna!

Siga o Blast nas Redes Sociais

Escreve para o Nintendo Blast sob a licença Creative Commons BY-SA 3.0. Você pode usar e compartilhar este conteúdo desde que credite o autor e veículo original.
Este texto não representa a opinião do Nintendo Blast. Somos uma comunidade de gamers aberta às visões e experiências de cada autor. Você pode compartilhar este conteúdo creditando o autor e veículo original (BY-SA 3.0).