xna game studio tutorial criando um jogo com xna em 1 hora
DESCRIPTION
XNA Game Studio Tutorial Criando um jogo com XNA em 1 hora. Alexandre Santos Lobão [email protected]. Quem sou eu?. 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. Proposta. - PowerPoint PPT PresentationTRANSCRIPT
2
Quem sou eu?
www.alexandrelobao.com
2
3
Agenda
Visão Geral do XNATutorial – um jogo em 1 hora
GráficosGame ComponentsInputDetecção de ColisãoSons Uso de fontes
4
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
5
Technology
Canal de talentosUniversidade
Crescimento
6
XNA Game Studio
Desenvolvimento para Xbox 360Arquitetura simples para criação de jogos2006
2007
2008
Multiplayer, Visual StudioAdotado em 700 universidades americanas4 contratos XBLA na competição Dream Build Play
Jogos da comunidade no Xbox LIVEDesenvolvimento de jogos para ZuneSuporte ao Xbox LIVE Arcade
7
Framework
Componentes do XNA Game Studio
Graphics Audio Input Math StorageNetwork
8
Framework
XNA FrameworkCamadas
Framework(extensões) Modelo de Aplicação Pipeline de Conteúdo
(content pipeline)
Framework(núcleo) Graphics Audio Input Math Storage Network
Plataforma Direct3D XACT XINPUT XCONTENT
Jogos Starter Kits Código Conteúdo Componentes
Legenda XNA já provê Você cria Comunidade
9
Arquitetura de um programa XNA
Ao se criar um projeto, são gerados dois arquivos:Program.csGame1.cs
10
Arquitetura de um programa XNA
Métodos chamados pela classe GameInitialize()
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
11
XNA Framework - Graphics
Fornece recursos de renderização de baixo nívelConstruído em cima do Direct3D 9Recursos oferecidos
Model, Mesh, BonesTexturasEfeitos e Shaders
BasicEffect facilita apresentar objetos 3DSpriteBatch para 2D e partículas
12
Tutorial – passo 1
Carregando texturasBola, tijolos e bastão
13
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();
14
“Components” de um game
Coleção Components da Classe GameInforma ao XNA quais os componentes do jogoPassos para criar um componente:
1. Criar uma classe derivada de GameComponent2. Criar um objeto desta classe3. Adicionar o objeto ao Game usando:
this.Components.Add( objeto );
O XNA automaticamente chama os métodos Update e Draw do objeto, se existirem
15
“Components” de um game
Uma classe derivada de GameComponent
class clsSprite : GameComponent{ public Texture2D textura; // sprite texture public Vector2 posicao; // sprite posicao on screen public Vector2 velocidade; // velocidade in pixels
public clsSprite(Game game, Texture2D Textura, Vector2 Posicao)
: base(game) { textura = Textura; posicao = Posicao; }}
16
Tutorial – passo 2
Criando um game componentMovimentando a bola
17
XNA Framework - Input
Xbox 360 controller
11 botões2 triggers (alavancas)2 direcionais analógicos1 direcional digitalDois motores de vibração
GamePadState state = GamePad.GetState(PlayerIndex.One);GamePad.SetVibration(PlayerIndex.One, 1.0f, 1.0f);
18
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;
19
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;
20
Tutorial – passo 3
Recebendo input do usuárioControle do bastão com o gamepad
21
Detecção de colisão
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;}
Todo jogo precisa disso!
22
Tutorial – passo 4
Detecção de colisãoFazendo a bola quicar no bastão e tijolos
23
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
24
Uso de Audio com XACT
Para incluir um som no jogo:1. Gerar o arquivo de som XACT2. Incluir o arquivo no jogo3. Utilizar o som via Content Pipeline
25
Uso de Audio com XACTUtilizando sons via Content Pipeline
Criação dos objetos// Audio objectsAudioEngine 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();}
26
Uso de Audio com XACTUtilizando 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();
27
Tutorial – passo 5
Colocando som no jogoMúsica de fundo e efeitos sonoros
28
Uso de Fontes no XNA1. 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> </Start> <End>~</End>
3. Utilizar a fonteNa 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();
29
Tutorial – passo 6
Escrevendo com XNANúmero de vidas, game over
Conclusões
31
Há diversas comunidades…Dezenas (centenas?) de comunidades ativas!
Dezenas (centenas?) jogos – muitos com fonte aberto!
32
E diversos “Starter Kits”…
33
Por onde começar?
Baixe o XNA Game Studio hoje mesmo!Baixe essa apresentação e outros recursos XNA no SharpGames!
www.sharpgames.netComunidade brasileira para desenvolvimento de jogos!Artigos, links, downloads, XNA, DirectX, Projeto Hoshimi e muito mais!
XNA Developer Centerhttp://msdn.microsoft.com/xna/
XNA Creators Clubhttp://creators.xna.com/
34
Livros
35
ALEXANDRE LOBÃOPROFESSOR DA PÓS-GRADUAÇÃO EM JOGOS ELETRÔNICOS DO IESB
COLUNISTA DA REVISTA OFICIAL DO XBOX 360ESCRITOR E ROTEIRISTA
www.AlexandreLobao.com