GameDev

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

A última edição da GameDev trouxe uma visão geral e simplificada da principal iniciativa da Microsoft para incentivar a entrada de desenvo... (por Sergio Oliveira em 04/03/2013, via Xbox Blast)

GameDev #6: Conhecendo o XNA – Mergulhando nas suas camadas
A última edição da GameDev trouxe uma visão geral e simplificada da principal iniciativa da Microsoft para incentivar a entrada de desenvolvedores independentes na indústria – o XNA. Nela discutimos as principais vantagens e facilidades oferecidas pela tecnologia. No entanto, a discussão foi breve e merece aprofundamento. Afinal de contas, ao iniciar um projeto em uma nova tecnologia, é preciso saber bem como ela se organiza e conhecer seus principais recursos. Prepare-se para mergulhar na estrutura e começar a desenvolver seu jogo com o XNA.

A evolução da profissão de desenvolvedor e suas ferramentas

A profissão de desenvolvedor de softwares nunca foi fácil. Além da responsabilidade que se tem e 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.

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á foi visto no segundo artigo da coluna, isso era algo considerado perda de tempo (leia-se dinheiro).

Programar antigamente não era nada fácil. Era preciso lidar com uma arquitetura extremamente restrita que lhe tomava horas e horas de produtividade.
Mesmo com todas as facilidades que dispomos atualmente, programar ainda não é tão trivial quanto parece. Agora imagine isso antigamente, com computadores gigantescos, pouco poder de processamento e cartões perfurados.
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 deslumbrantes e jogos de fazer o queixo cair.

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 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 por quê?

Seja bem-vindo ao mundo do XNA!

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 Windows Phone; e muito, mas muito pouco mesmo, para distribuir seus jogos na Live.

Lançado oficialmente em 2006, a ideia do XNA já vinha em desenvolvimento 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.

Esquema evolucional da tecnologia que deu origem ao XNA
A ideia do XNA já vinha sendo desenvolvida desde a época do lançamento do Windows 95 e a primeira versão do DirectX. Muitas das ideias que surgiram naquela época foram sendo trabalhadas e retrabalhadas até o lançamento da tecnologia em 2006. A figura mostra como as coisas evoluíram ao longo do tempo.

A utilização de APIs permite que programas utilizem serviços oferecidos por outros desenvolvedores ou estúdios, mas sem ser envolver com os detalhes de implementação desse serviço. Trazendo para o nosso cotidiano, é como se você tivesse uma empresa e, de repente, não quisesse se preocupar com a parte de serviços gerais e então contrata 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 ainda 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 por aí vai. Apenas diga como as coisas deverão ser feitas que o XNA se encarregará de fazer o resto.
Há alguns meses surgiu um boato de que o XNA foi descontinuado pela Microsoft. Tal boato teve origem após um comunicado vago da empresa que afirmou não haver planos para o lançamento de uma nova versão da tecnologia num futuro próximo. O alarde, no entanto, não é para tanto. Se a Microsoft quisesse acabar com o XNA seu site e comunidade não continuariam ativos. E além do mais, não tem como descontinuar algo que está presente no .NET Framework desde a versão 3.5. Se levarmos em consideração que a empresa está trabalhando no projeto Durango (o que pode ser sua próxima geração de consoles), de repente o comunicado faz um pouco de sentido, já que esperamos que uma versão melhorada (ou recodificada) do XNA seja lançada. O XNA é a porta de entrada que a Microsoft oferece aos indies para a indústria – não faz, e não faria sentido termina-la.

As camadas do XNA Framework

Na visão geral apresentada no último artigo, os principais componentes do XNA foram apresentados, assim como o framework, o principal responsável por tornar todo o trabalho mais simples. Também foi visto que ele livra o desenvolvedor da “parte chata” de desenvolver aplicações, jogos e soluções mais trabalhosas. Contudo não foi visto e nem explicado 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:

Esquema das camadas do XNA Framework: Jogos, Extensões, Núcleo e Plataforma

Jogos

Na camada de Jogos encontram-se os starter kits que são 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 e desenvolvidos. Há um grande número de starter kits disponíveis e de vez em quando surge um novo na Xbox Live Indie Games.

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 até às texturas 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 fazer uso deles, seja para apenas adicionar ao projeto, seja para modificá-los.

Racing Game é um dos inúmeros exemplos de starter kits disponibilizados pela comunidade
Racing Game é um dos vários starter kits disponíveis na Xbox Live Indie Games. Ao baixar um dos starter kits você receberá todo o código-fonte do jogo e poderá fazer com ele o que bem entender: estudar, modificar, aprimorar, o que for.

Extensão

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

O Modelo de Aplicação é o responsável pela criação e gerenciamento de janelas do jogo – é ele quem inicializa o DirectX, seus componentes 3D, áudio, input, entre outros. Além disso, ele é o responsável por gerenciar o loop (ciclo) da execução do jogo. Pensando no fluxograma de um jogo simples (figura abaixo) e o analisando bem, percebe-se que, uma vez dentro do jogo em si, fica-se dando voltas e voltas até que o objetivo principal do jogo seja alcançado. Pois bem, é o Modelo de Aplicação que gerencia tudo isso, sendo o responsável por “escutar” todas as ações dentro do jogo para verificar o que se está fazendo, o que deverá ser feito a partir do que já foi feito, verificar se os tais objetivos para “destravar” uma área do jogo foram atingidos e, finalmente, se todos os requisitos para finalizar o jogo foram cumpridos.

Fluxograma simplificado que representa basicamente todo e qualquer jogo


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

O Content Pipeline é o componente que 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 melhorar todos os conteúdos que são importados para o 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 diferentes 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 fornecem recursos para as mais diversas ações do jogo.

O Graphics fornece capacidade de renderização de baixo nível, rodando tudo em cima do Direct3D. Dentre os seus inúmeros recursos, destacam-se o 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.

O objetivo do Graphics no XNA é desenhar os gráficos na tela, não importando qual o tipo deles. Utilizando o Direct3D, o Graphics é capaz de desenhar 2D, 3D e até mesmo shaders! Na imagem, renderização de gráficos em dispositivo com Windows Phone 7.
As madeixas da belíssima Lara Croft ganharam tratamento mais especial com a nova tecnologia TressFx da AMD

Resumidamente, shaders são um conjunto de instruções que definem o comportamento da superfície de objetos. São responsáveis, por exemplo, pelos reflexos da lataria de um carro de acordo com o posicionamento da luz, a complexa movimentação da água e a "dança" das chamas de fogo. Pode parecer bobo, mas atualmente esses são alguns dos maiores desafios dos desenvolvedores de jogos. Inclusive acabou de ser anunciado que o cabelo da Lara Croft receberá um shader específico para torna-lo o mais natural possível - veja só!

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 intérprete 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.

Os componentes de Input são os responsáveis por toda a obtenção de entrada de dados disponibilizada 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á suporte nativo para teclados, mouses, joystick do Xbox 360, além de guitarra, tambores, volantes e pedais!

Exemplo de mapeamento dos botões de um joystick no XNA
O XNA possui uma biblioteca destinada completamente ao mapeamento das ações de entrada realizadas pelo jogador, seja ela realizada no teclado, joystick ou guitarra. Com ela também é possível enviar comandos de reação ao controle, como por exemplo quando o controle deverá vibrar e em qual intensidade.
O componente Math oferece uma vasta gama de cálculos e funções matemáticas pré-definidos para se trabalhar com colisão, movimentação, física e definição de vetores, matrizes, planos, esferas 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.

Por ú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! 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 a qual todos os componentes que foram vistos até aqui estão baseados. Sem essa plataforma nada disso seria possível, pois todas as outras camadas fazem uso, de alguma forma, dos componentes dessa aqui.

Você viu 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, digo que 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!

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).

TriLinea é outro jogo nacional, desenvolvido por Edison S. Prata Jr., Renato Pelizzari da Silva e Davi da Silva Prata.
TriLinea é outro jogo nacional, desenvolvido por Edison S. Prata Jr., Renato Pelizzari da Silva e Davi da Silva Prata.
Devido a sua facilidade e a produtividade que proporciona àqueles que estudam e trabalham com ele, o XNA vem cada vez mais sendo adotado em cursos técnicos e superiores. A plataforma é bastante promissora e acessível a todos aqueles gamers que desejam iniciar seus estudos para desenvolver e produzir seu próprio jogo. Vale à pena investir tempo e dedicação para aprender XNA e, quem sabe, alçar voos maiores por aí a fora!
Nos dois últimos artigos apresentamos a proposta do XNA e explanamos, de maneira teórica,  sua organização, funcionalidades, camadas e componentes. A partir do próximo artigo começaremos o hands-on da coluna, dando início ao trabalho com a linguagem de programação, o Visual Studio e o XNA Game Studio. E finalmente começaremos a escrever as primeiras linhas de código do nosso jogo. Se tiverem dúvidas, comentem na caixinha abaixo. Nos vemos na próxima edição!
Confira a 5ª edição da coluna GameDev
Confira a 7ª edição da coluna GameDev

Revisão: Leandro Freire
Sergio Oliveira escreve para o Xbox 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 do mesmo.

Comentários

Google+
Disqus
Facebook