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).
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.
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:
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.
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.
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.
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!
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. |
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
Comentários