domingo, 21 de outubro de 2007

Meu jogo em XNA - parte 1


Bem, aqui eu começo uma série de posts sobre o meu jogo (joguinho na verdade) em XNA, feito com o objetivo de aprender os conceitos básicos de desenvolvimento de jogos com o framework da Microsoft.

Antes de eu começar a desenvolver um joguinho, ou melhor, de qualquer um começar a desenvolver um jogo, temos que pensar em como ele será exatamente. Claro que não pensei em criar um jogo 3D. Isso não tinha nem discussão. A discussão era sobre o estilo. Há também outras coisas a se discutir, mas vamos por partes! Aproveitei, então, uma idéia de um jogo minimamente interessante e decidi fazer um de estilo parecido, cujo objetivo é acertar um alvo (que escolhi ser um extraterrestre) com um míssel, disparado a partir de uma coisa, que escolhi ser uma nave. Calma, lá... falando assim, parece até que o jogo é O tal. Mas ele é o mais simples que pode ser. Literalmente!

O nome eu decidi depois que decidi qual o estilo do jogo, obviamente. Nome escolhido: Shooting.

Para atingir o objetivo do Shooting (ao longo do tempo vou adicionando novas características), tive que catar 3 figurinhas na Internet, a saber: a nave espacial, o alvo (um E.T.) e um míssel. Você também pode fazer seus próprios desenhos, mas como eu não tenho dotes artísticos, peguei na net mesmo. Ah, também peguei na net uma textura para o ponteiro do mouse.

Com as texturas em mãos, vamos refletir um pouco sobre as funções básicas do framework XNA, a saber: Initialize(), LoadGraphicsContent(), Update() e Draw(). Este post visa única e exclusivamente discutir introdutoriamente essas funções básicas a todos os jogos feitos em XNA.

Cada função já é razoavelmente bem explicada pelo próprio código gerado por padrão a partir do framework XNA assim que todo projeto é iniciado. Assim, temos o seguinte para a função Initialize():

"Allows the game to perform any initialization it needs to before starting to run. This is where it can query for any required services and load any non-graphic related content. Calling base.Initialize will enumerate through any components and initialize them as well."

Apertando a tecla SAP, isso significa: nesta função é onde o framework vai inicializar tudo que é necessário antes que o jogo comece a ser executado, como por exemplo, a configuração da resolução da janela em que o jogo vai executar (640x480?), as texturas, que no caso do meu jogo são a nave e o alvo (o míssil não é inicializado assim que o jogo começa, mas somente quando o jogador dispara algum evento num dispositivo de entrada, entendeu?), etc.

Na função LoadGraphicsContent(), o código gerado automaticamente pelo framework nos diz:

"Load your graphics content. If loadAllContent is true, you should load content from both ResourceManagementMode pools. Otherwise, just load ResourceManagementMode.Manual content."

Apertando a tecla SAP, isso significa: essa função é responsável por carregar no framework o conteúdo gráfico necessários ao jogo, como, por exemplo, a textura do mouse, textura do fundo de tela, etc...

Na função Update(), o framework no diz:

"Allows the game to run logic such as updating the world, checking for collisions, gathering input and playing audio."

Isto é, essa função é responsável pelo Loop principal do jogo. Aliás, todo jogo tem loop. Não importa se ele foi o primeiro jogo desenvolvido para um computador ou o último, todos têm um loop principal. Esta é uma das principais funções do jogo, pois faz a parte pesada do jogo, como detectar colisões.

Na função Draw(), o framework XNA nos diz:

"This is called when the game should draw itself."

Isto é, Draw é a função que desenha na tela de saída (monitor) o que a lógica do jogo diz que está acontecendo.

Este post, como eu já disse, visa somente mostrar um introdução sobre essas 4 funções básicas. Nos posts seguintes, discutiremos os conceitos envolvidos na lógica do jogo. Além disso, colocarei o fonte pra vocês. O importante é ir indo passo-a-passo, sem pressa, até porque também estou aprendendo.

Nenhum comentário: