XNA Game Studio
Tutorial
Criando um jogo com XNA em 1 hora
Alexandre Santos Lobão
[email protected]
Quem sou eu?
www.alexandrelobao.com
2
2
Agenda
Visão Geral do XNA
Tutorial – um jogo em 1 hora
Gráficos
Game Components
Input
Detecção de Colisão
Sons
Uso de fontes
3
Proposta
Iniciativa da Microsoft para facilitar e popularizar o
desenvolvimento de jogos digitais, permitindo a sua criação
através de linguagem C# e ricas APIs de desenvolvimento
4
5
XNA Game Studio
2006
Desenvolvimento para Xbox 360
Arquitetura simples para criação de jogos
2007
Multiplayer, Visual Studio
Adotado em 700 universidades americanas
4 contratos XBLA na competição Dream Build Play
2008
Jogos da comunidade no Xbox LIVE
Desenvolvimento de jogos para Zune
Suporte ao Xbox LIVE Arcade
6
Componentes do XNA Game Studio
Graphics
Audio
Math
Storage
Framework
Input
Network
7
Camadas
Jogos
Framework
(extensões)
Starter Kits
Código
Modelo de Aplicação
Conteúdo
Componentes
Pipeline de Conteúdo
(content pipeline)
Framework
Framework
Graphics
(núcleo)
Plataforma
Legenda
Direct3D
XNA já provê
Audio
Input
XACT
Você cria
Math
XINPUT
Storage
Network
XCONTENT
Comunidade
8
Arquitetura de um programa XNA
Ao se criar um projeto, são gerados dois arquivos:
Program.cs
Game1.cs
9
Arquitetura de um programa XNA
Métodos chamados pela classe Game
Initialize()
Inicializações gerais do jogo
LoadContent()
Chamado sempre que é necessário carregar os recursos
(conteúdos)
UnloadContent()
Chamado sempre que é necessário liberar os recursos (conteúdos)
A cada game loop:
Update
Onde se coloca a lógica principal do jogo (cálculos)
Draw
Onde se colocam as rotinas de desenho do jogo
10
XNA Framework - Graphics
Fornece recursos de renderização de baixo
nível
Construído em cima do Direct3D 9
Recursos oferecidos
Model, Mesh, Bones
Texturas
Efeitos e Shaders
BasicEffect facilita apresentar objetos 3D
SpriteBatch para 2D e partículas
11
Tutorial – passo 1
Carregando texturas
Bola, tijolos e bastão
12
Desenho de objetos 2D
Na classe game1:
private Texture2D textura;
No Método LoadGraphics:
textura = content.Load<Texture2D>("xna_thumbnail");
No Método UnloadGraphics:
textura.Dispose();
No Método Draw:
SpriteBatch.Begin(SpriteBlendMode.AlphaBlend);
SpriteBatch.Draw(textura, Vector2.One, Color.White);
SpriteBatch.End();
13
“Components” de um game
Coleção Components da Classe Game
Informa ao XNA quais os componentes do jogo
Passos para criar um componente:
1. Criar uma classe derivada de GameComponent
2. Criar um objeto desta classe
3. Adicionar o objeto ao Game usando:
this.Components.Add( objeto );
O XNA automaticamente chama os métodos
Update e Draw do objeto, se existirem
14
“Components” de um game
Uma classe derivada de GameComponent
class clsSprite : GameComponent
{
public Texture2D textura;
//
public Vector2 posicao;
//
public Vector2 velocidade; //
sprite texture
sprite posicao on screen
velocidade in pixels
public clsSprite(Game game, Texture2D Textura, Vector2
Posicao)
: base(game)
{
textura = Textura;
posicao = Posicao;
}
}
15
Tutorial – passo 2
Criando um game component
Movimentando a bola
16
XNA Framework - Input
Xbox 360 controller
11 botões
2 triggers (alavancas)
2 direcionais analógicos
1 direcional digital
Dois motores de vibração
GamePadState state = GamePad.GetState(PlayerIndex.One);
GamePad.SetVibration(PlayerIndex.One, 1.0f, 1.0f);
17
Tratamento de input do usuário
Podemos ler o estado do GamePad...
public override void Update(GameTime gameTime)
{
...
// Muda a posição usando o thumbstick da esquerda
GamePadState gamePad = GamePad.GetState(PlayerIndex.One);
Posicao.X += gamePad.ThumbSticks.Left.X;
Posicao.Y -= gamePad.ThumbSticks.Left.Y;
18
Tratamento de input do usuário
2. Alterar o método Update para tratar o input do
usuário - Teclado
public override void Update(GameTime gameTime)
{
...
// muda a posição usando o teclado
KeyboardState keyboardState = Keyboard.GetState();
if (keyboardState.IsKeyDown(Keys.Up))
Posicao.Y -= 10;
if (keyboardState.IsKeyDown(Keys.Down))
Posicao.Y += 10;
if (keyboardState.IsKeyDown(Keys.Left))
Posicao.X -= 10;
if (keyboardState.IsKeyDown(Keys.Right))
Posicao.X += 10;
19
Tutorial – passo 3
Recebendo input do usuário
Controle do bastão com o gamepad
20
Detecção de colisão
Todo jogo precisa disso!
public bool Colidiu(clsSprite sprite)
{
// Verifica se colidiu com a sprite
if (this.posicao.X + this.textura.Width > sprite.posicao.X &&
this.posicao.X < sprite.posicao.X + sprite.textura.Width &&
this.posicao.Y + this.textura.Height > sprite.posicao.Y &&
this.posicao.Y < sprite.posicao.Y + sprite.textura.Height)
return true;
else
return false;
}
21
Tutorial – passo 4
Detecção de colisão
Fazendo a bola quicar no bastão e tijolos
22
Uso de Audio com XACT
Para que o som seja utilizável tanto no
Windows quanto no Xbox 360, é necessário
converter os sons em “Sound banks”,
Cada “Sound bank” é composto por “Wave
banks”
Cada “Wave Bank” arnazena diversos arquivos
(formato WAV ou AIF apenas)
Formatos mais “profissionais”, sem perda de
informação como o MP3
23
Uso de Audio com XACT
Para incluir um som no jogo:
1. Gerar o arquivo de som XACT
2. Incluir o arquivo no jogo
3. Utilizar o som via Content Pipeline
24
Uso de Audio com XACT
Utilizando sons via Content Pipeline
Criação dos objetos
// Audio objects
AudioEngine audioEngine;
WaveBank waveBank;
SoundBank soundBank;
protected override void Initialize()
{
audioEngine = new AudioEngine("MySounds.xgs");
waveBank = new WaveBank(audioEngine, "Wave Bank.xwb");
soundBank = new SoundBank(audioEngine, "Sound Bank.xsb");
base.Initialize();
}
25
Uso de Audio com XACT
Utilizando sons via Content Pipeline
Gerar um efeito sonoro (som sem loop)
soundBank.PlayCue("chord");
Tocar música de fundo (som com loop)
// Iniciar a música
myLoopingSound = soundBank.GetCue("notify");
myLoopingSound.Play();
// Parar ou continuar a música
if (myLoopingSound.IsPaused)
myLoopingSound.Resume();
else
myLoopingSound.Pause();
26
Tutorial – passo 5
Colocando som no jogo
Música de fundo e efeitos sonoros
27
Uso de Fontes no XNA
1.
Incluir novo item do tipo “SpriteFont”
2.
Configurar parâmetros da fonte
<FontName>Arial</FontName>
<Size>14</Size>
<Spacing>2</Spacing>
<Style>Regular</Style>
<CharacterRegion> <Start>&#32;</Start> <End>&#126;</End>
3.
Utilizar a fonte
Na classe Game1.cs
SpriteFont fonteArial;
No método Initialize()
fonteArial = content.Load<SpriteFont>("FonteArial");
No método Draw()
mySpriteBatch.Begin();
mySpriteBatch.DrawString(fonteArial, “Hello World!", Vector2.One, Color.Yellow);
mySpriteBatch.End();
28
Tutorial – passo 6
Escrevendo com XNA
Número de vidas, game over
29
Conclusões
Há diversas comunidades…
31
E diversos “Starter Kits”…
32
Por onde começar?
Baixe o XNA Game Studio hoje mesmo!
Baixe essa apresentação e outros recursos XNA no
SharpGames!
www.sharpgames.net
Comunidade brasileira para desenvolvimento de jogos!
Artigos, links, downloads, XNA, DirectX, Projeto Hoshimi e
muito mais!
XNA Developer Center
http://msdn.microsoft.com/xna/
XNA Creators Club
http://creators.xna.com/
33
Livros
34
35
Download

XNA Game Studio Tutorial Criando um jogo com XNA em 1 hora