comp coop 10

17/10/2009

Série XNA para não programadores

Filed under: XNA — Tags:, , , — brunoduartec @ 11:40 am

Antes de mais nada, de volta ao blog, estava meio desanimado mas agora me deu ânimo de produzir um material para quem quer estudar XNA, eu sei que é mais um tutorial, mas a diferença é que aqui, caso você tenha alguma dúvida e eu souber, é claro, vou criando tutoriais a respeito.

Primeiramente minha pretenção não é a de criar um tratado a respeito de XNA, na verdade nem tenho pretenções algumas quanto à esses tutoriais, só quero ajudar quem eu puder e aproveitar para aprender muito com isso.
O porque do título ? É porque eu acredito que o XNA é simples e flexível a ponto de suprir desde o usuário que quer fazer pequenas apresentações e pequenos jogos até o profissional que pretende desenvolver jogos para vender.

A estrutura do projeto

Como primeira parte, vamos começar do zero, espero a compreensão daqueles que já sabem ou que não se importam com pequenos detalhes e querem ver logo coisas na tela. Depois de criar um projeto você vai ter uma estrutura como essa:


using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;
using Microsoft.Xna.Framework.Net;
using Microsoft.Xna.Framework.Storage;

namespace Tutorial1
{
///
/// This is the main type for your game
///
public class Game1 : Microsoft.Xna.Framework.Game
{
GraphicsDeviceManager graphics;
SpriteBatch spriteBatch;

public Game1()
{
graphics = new GraphicsDeviceManager(this);
Content.RootDirectory = "Content";
}

///
/// 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.
///
protected override void Initialize()
{
// TODO: Add your initialization logic here

base.Initialize();
}

///
/// LoadContent will be called once per game and is the place to load
/// all of your content.
///
protected override void LoadContent()
{
// Create a new SpriteBatch, which can be used to draw textures.
spriteBatch = new SpriteBatch(GraphicsDevice);

// TODO: use this.Content to load your game content here
}

///
/// UnloadContent will be called once per game and is the place to unload
/// all content.
///
protected override void UnloadContent()
{
// TODO: Unload any non ContentManager content here
}

///
/// Allows the game to run logic such as updating the world,
/// checking for collisions, gathering input, and playing audio.
///
/// Provides a snapshot of timing values.
protected override void Update(GameTime gameTime)
{
// Allows the game to exit
if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
this.Exit();

// TODO: Add your update logic here

base.Update(gameTime);
}

///
/// This is called when the game should draw itself.
///
/// Provides a snapshot of timing values.
protected override void Draw(GameTime gameTime)
{
GraphicsDevice.Clear(Color.CornflowerBlue);

// TODO: Add your drawing code here

base.Draw(gameTime);
}

static void Main(string[] args)
{
using (Game1 game = new Game1())
{
game.Run();
}
}
}

}

É importante salientar que o XNA possui um pipeline, como se fosse uma esteira de uma fábrica em que uma coisa é feita por vez, que não deve ser burlada, e nesse tutorial vou tentar seguir a estrutura mais canônica possível. Algumas funções principais como:

  • Initialize: Teoricamente a primeira função a ser chamada
  • LoadContent: Toda abertura de modelos, texturas, sons, fontes e outros deve ser feita aqui.
  • Update: Chamada de tempos em tempos.
  • Draw: Chamada sempre após o Update.

Quanto à estrutura de diretórios os projetos XNA sempre possuem uma pasta Content onde os arquivos de imagens, modelos etc, são guardados.

É importante que esses arquivos estejam no content pois ao compilar o projeto serão gerados .xnb deles e armazenados no content na pasta bin.

Por alto, todo arquivo tem um Importer e um Processor, que são a maneira como o XNA importa e como e trata os dados importados, então se o XNA nativamente não aceita um formato nada o impede de criar uma maneira de ele importar. Essa parte é importante, sempre manter o Importer e o Processor correto, pois digamos que você esteja usando uma biblioteca de animação por exemplo que abre e trata o modelo de maneira diferente, ao abrir o modelo, se você não especificar o XNA não saberá o que fazer com ele.

FONTE: Ploobs Game.
Bruno Duarte.
Anúncios

1 Comentário »

  1. Uma dos melhores textos sobre este assunto, obrigado por compartilhar.

    Comentário por Dublado — 31/01/2011 @ 6:03 pm


RSS feed for comments on this post. TrackBack URI

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

Crie um website ou blog gratuito no WordPress.com.

%d blogueiros gostam disto: