Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
1. Introdução
O objetivo deste artigo é despertar nos amantes de jogos a curiosidade de aprofundar
seus conhecimentos na construção e na facilidade de desenvolver pequenos projetos,
que seja por hobby ou profissionalmente. Existem várias ferramentas que possibilitam a
criação de jogos, escolhi o Framework XNA por ser divertido e estar mais próximo das
ferramentas utilizadas para desenvolver programas comerciais.
Microsoft XNA é um framework desenvolvido pela Microsoft para auxiliar os
desenvolvedores no processo de criação de jogos tanto para Windows (PC), Xbox 360
(Video game) e Zune (Media Player Portátil). A primeira versão lançada foi o XNA 1.0
e se deu por volta de novembro de 2006, mesmo não sendo popular entre a comunidade
de desenvolvedores o framework já ajudava bastante o programador a criar seus jogos
para Windows sem se necessidade de conhecimentos técnicos sobre DirectX (Interface
de Programação de Aplicativos Graficos). Com o passar do tempo a Microsoft fez
modificações consideráveis no XNA Framework principalmente no que diz respeito a
conexões em rede que antes não existiam na versão 1.0.
Atualmente o framework esta na versão 3.1, porém, neste artigo será trabalhado
a versão 3.0. O XNA possui uma rica API (Interface de Programação de Aplicativos)
para criação de jogos 3D assim como jogos 2D, além de permitir a manipulação de som
e entrada de dados como teclado, mouse e joystick (XBox 360).
Com o framework a interação com recursos gráficos, teclado e outros periféricos
ficam mais fáceis, ou seja, sem a necessidade de utilizar funções diretas e DLL’s
(Bibliotecas de Ligações Dinâmicas) do DirectX, a incorporação destes recursos pelo
XNA facilita a manipulação de texturas, o que antes devia ser programado com códigos
complexos, agora passa a ser apenas uma linha de código utilizada para que possamos
carregar uma imagem sem nos preocuparmos em saber qual a extensão ou como iremos
tratar o arquivo.
Outro benefício do framework é a compatibilidade do código desenvolvido para
ser usado no Windows, Xbox 360 e Zune. As ferramentas para trabalhar com
desenvolvimento para PC são distribuídas gratuitamente pela Microsoft, basta apenas
realizar o download e instalá-la em sua maquina. O desenvolvedor pode utilizar também
de ferramentas profissionais, porém pagas.
Já o desenvolvimento para Xbox é necessário uma assinatura (licença) junto ao
XNA Creators Club anual ou parcial por 04 (quatro) meses para a publicação dos jogos
na rede. A iniciativa da Microsoft para facilitar ao máximo o desenvolvimento de jogos
vem de encontro a necessidade de entusiastas e até mesmo a outros tipos de
desenvolvedores como os profissionais, que buscam a praticidade na criação de seus
jogos.
Os métodos Draw e Update podem ser executados até 60x/segundo, cada execução é
tratada como um ciclo, aos olhos humanos é perceptível o objeto que está em
movimento, porém, durante os ciclos toda a tela é refeita, e os tratamentos são
efetuados. O desenvolvimento do projeto de jogo pode utilizar as seguintes camadas:
Plataforma:
Direct3D – Controla os Gráficos 3D;
XACT – Controla o áudio e possibilita a criação de sons;
XINPUT – Suporte a dispositivos de entrada (Teclado, Mouse e outros);
XContent – Suporte a conteúdo de imagens, vídeos, sprites.
Core Framework:
Acesso básico a inicialização de Gráficos, Áudio, Entrada de Dados, Matemática
(lógica) e Armazenamento;
Framework Dot.NET 2.0 ou mais atual.
Extended Framework:
Modelo de Aplicação – Comportamento do jogo (inteligência);
Content Pipeline – Gerencia conteúdos, loadings de texturas, som e matemática.
Jogos:
Starter Kits – Modelos com a inicialização básica dos componentes;
Code – Código de desenvolvimento;
Content – Conteúdo (imagens, sons...);
Components – Elementos feitos pela comunidade, disponível para download.
4. Desenvolvendo um Jogo
O objetivo é apresentar, de forma simples, como criar um jogo com as funcionalidades
básicas já disponibilizadas pelo Framework XNA 3.0, já disponível para download.
Enredo: O jogador “Heroi” deve recuperar todas as jóias da rainha sem ser pego
pelos adversários “Múmias” espalhados pelo mapa utilizando os recursos de
movimentação (direita / esquerda / pulo) acionados pelas setas ou joystick, e o efeito de
fogo e fumaça (espaço) gerando invencibilidade temporária ao “Heroi”, modelo
conforme Figura 3.
Figura 3. Enredo
Figura 6. LoadContent
Update: este método é sobreposto pela classe Game (Figura 7), ou seja, após a
primeira execução ele é chamado continuamente.
//loop para ler o teclado e executar rotinas programadas no mapa
protected override void Update(GameTime gameTime)
{
HandleInput();
level.Update(gameTime);
base.Update(gameTime); }
Figura 7. Update
HandleInput: método responsável pelo controle das teclas pressionadas e pela
interação com o Joystick, neste método foi inserido manualmente o código para
aceitar a tecla ESC para sair e a tecla UP para continuar o jogo (Figura 8).
//responsavel por capturar os eventos do teclado ou joystick
private void HandleInput()
{
KeyboardState keyboardState = Keyboard.GetState();
GamePadState gamepadState = GamePad.GetState(PlayerIndex.One);
//sai do jogo quando pressionado Back no joystick ou tecla ESC
if ((gamepadState.Buttons.Back == ButtonState.Pressed) ||
(keyboardState.IsKeyDown(Keys.Escape)))
Exit();
bool continuePressed = keyboardState.IsKeyDown(Keys.Up) ||
gamepadState.IsButtonDown(ContinueButton);
...
Figura 8. HandleInput
Figura 9. LoadNextLevel
Draw: método sobreposto pela classe Game, ou seja, após a primeira execução
ele é chamado continuamente (Figura 10), responsável por gerar imagens na tela
é executado 60 frames/segundo para PC, XBox360 e 30 frames/segundo Zune.
//metodo para desenhar a tela
protected override void Draw(GameTime gameTime)
{ //limpa a tela virtual
graphics.GraphicsDevice.Clear(Color.CornflowerBlue);
//inicializa metodo de impressao da imagem na tela virtual
spriteBatch.Begin();
//desenha a imagem na tela virtual
level.Draw(gameTime, spriteBatch);
//desenha os textos na tela virtual
DrawHud();
spriteBatch.End();
//transfere a tela virtual de uma vez para a tela do usuario
base.Draw(gameTime); }
Gem.cs: responsável por controlar e desenhar as Jóias distribuídas no mapa (Figura 13),
quando o “Heroi”colide com a jóia é executando o método OnGemCollected dentro do
Level.cs que por sua vez retira o objeto da tela e chama o método OnCollected desta
classe para executar o som. O efeito de onda é criado por cálculos matemáticos no
método Update, durante a sequência de montagem das imagens na tela o sistema cria
cada objeto com seus atributos específicos inclusive a posição na tela.
//atualiza posição do objeto
public void Update(GameTime gameTime)
{
//variaveis de controle - altura, variação e sincronismo
const float BounceHeight = 0.18f;
const float BounceRate = 3.0f;
const float BounceSync = -0.75f;
//matematica logica para criar o efeito de onda
//altera a coordena X das joias em sequencia com a próxima
double t = gameTime.TotalGameTime.TotalSeconds * BounceRate +
Position.X * BounceSync;
bounce = (float)Math.Sin(t) * BounceHeight * texture.Height;
}