Académique Documents
Professionnel Documents
Culture Documents
Aula 2
Desenho em 2D
Agenda: Aula 2
Reviso Arquitetura de um programa XNA Desenho em 2D Components de um game Tratamento de input do usurio Diviso dos grupos para o projeto da matria
Extended Framework
Application Model
Content Pipeline
Core Framework
Graphics
Audio
Input
Math
Storage
Plataforma
Direct3D
XACT
XINPUT
XContent
Legenda
XNA Provides
Ns criamos
Comunidade
ClasseGame
a central da arquitetura XNA Tem, internamente, um game loop chamado a cada 1/60 de segundo (default) Propriedade TargetElapsedTime pode mudar esta velocidade
is 1/60th of a second.
LoadGraphicsContent(bool loadAllContent)
Chamado sempre que necessrio carregar os recursos (contedos) grficos
Isso pode acontecer no incio do jogo, ou quando a janela (no Windows) sai de trs de outra janela, ou quando por algum erro se perde a referncia ao dispositivo (device) de video
Quando LoadAllContent true, necessrio recarregar todo o contedo (jncluindo os marcados como modo de gerenciamento de recursos automtico). Mais sobre o modo de gerenciamento de recursos no prximo slide
Update(GameTime gameTime)
Chamado a cada game loop Onde se coloca a lgica principal do jogo (clculos) Recebe um objeto (gameTime) com uma foto com informaes sobre o tempo no instante da chamada do mtodo Mais sobre gameTime no prximo slide
Draw(GameTime gameTime)
Chamado a cada game loop Onde se colocam as rotinas de desenho do jogo
11
12
Desenho de objetos 2D
13
Desenho de objetos 2D
Na classe game 1:
private Texture2D textura; private SpriteBatch Renderizador2D;
No Mtodo LoadGraphicsContent:
override void LoadGraphicsContent(bool loadAllContent) { if (loadAllContent) { // Para escolher tamanho da janela ou modo fullscreen: //graphics.PreferredBackBufferWidth = 400; //graphics.PreferredBackBufferHeight = 400; //graphics.IsFullScreen = true; //graphics.ApplyChanges(); textura = content.Load<Texture2D>("xna_thumbnail"); Renderizador2D = new SpriteBatch(graphics.GraphicsDevice); } }
14
Desenho de objetos 2D
No Mtodo UnloadGraphicsContent:
override void UnloadGraphicsContent(bool unloadAllContent) { if (unloadAllContent) { textura.Dispose(); Renderizador2D.Dispose(); content.Unload(); } }
15
Desenho de objetos 2D
No Mtodo Draw:
override void Draw(GameTime gameTime) { graphics.GraphicsDevice.Clear(Color.White); Renderizador2D.Begin(SpriteBlendMode.AlphaBlend); Renderizador2D.Draw(textura, Vector2.One, Color.White); Renderizador2D.End(); base.Draw(gameTime); }
16
Components de um game
17
Components de um game
Coleo 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 );
18
Components de um game
1. Criar uma classe derivada de GameComponent (1/2)
class clsSprite : GameComponent { public Texture2D textura; // public Vector2 posicao; // public Vector2 velocidade; //
public clsSprite(Game game, Texture2D Textura, Vector2 Posicao) : base(game) { textura = Textura; posicao = Posicao; } }
19
Components de um game
1. Criar uma classe derivada de GameComponent (2/2)
public override void Update(GameTime gameTime) { // ajusta a velocidade para no sair pelas bordas da tela if(posicao.X + textura.Width + velocidade.X > this.Game.Window.ClientBounds.Width) velocidade.X = -velocidade.X; // direita if (posicao.Y + textura.Height + velocidade.Y > this.Game.Window.ClientBounds.Height) velocidade.Y = -velocidade.Y; // de baixo if (posicao.X + velocidade.X < 0) velocidade.X = -velocidade.X; if (posicao.Y + velocidade.Y < 0) velocidade.Y = -velocidade.Y; // Atualiza a posio posicao += velocidade; }
//
esquerda
//
de cima
20
Components de um game
2. Criar um objeto desta classe 3. Adicionar o objeto ao Game
private clsSprite Desenho2D; ... protected override void LoadGraphicsContent(bool loadAllContent) { ... // Load a 2D texture sprite Desenho2D = new clsSprite(this, content.Load<Texture2D>("xna_thumbnail"), Vector2.One); Desenho2D.velocidade = new Vector2(1, 2); this.Components.Add(Desenho2D); }
21
Components de um game
Como no fizemos override do Draw, precisamos atualizar o mtodo Draw da classe Game
protected override void Draw(GameTime gameTime) { graphics.GraphicsDevice.Clear(Color.White); Renderizador2D.Begin(SpriteBlendMode.AlphaBlend); Renderizador2D.Draw(Desenho2D.textura, Desenho2D.posicao, Color.White); Renderizador2D.End(); base.Draw(gameTime); }
22
23
25
// muda a posio usando o mouse MouseState mouse = Mouse.GetState(); novaPosicao.X = mouse.X; novaPosicao.Y = mouse.Y;
...
28
30
31
32
33
35
//
Textura da tela
37
39
40
43
Perguntas?
44