Apresentação Alexandre Tolstenko Nogueira alexandre@tolstenko.net http://tolstenko.net
Teoria Prática
Teoria XNA Pong Carregar e desenhar imagens na tela Estrutura e organização básica Colisões Componentes Camadas Facilidades
XNA Componentes Graphics Audio Input Framework Math Storage Network 5
XNA Camadas Jogos Starter Kits Código Conteúdo Componentes 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 Legenda XNA já provê Você cria Comunidade
Facilidades (algumas) Renderização de baixo nível Recursos oferecidos Model, Mesh, Bones; Texturas, Audio, Vídeo e outros conteúdos; Efeitos e Shaders; Redes SpriteBatch para 2D e partículas BasicEffect facilita apresentar objetos 3D 7
Teoria XNA Pong Carregar e desenhar imagens na tela Estrutura e organização básica Colisões História Objetivo Modelagem Computacional
História Criadores: Nolan Bushnell e Ted Dabney O que é? O videogame Pong consiste em um console ligado a um monitor e era movido a moedinhas. 9
História (ou estória?) Os inventores deixaram a máquina em um bar em San Francisco, Califórnia. No dia seguinte, tiveram uma surpresa quando checaram a máquina e viram que ela estava lotada de moedas. Aquelas moedas mudaram toda a perspectiva que os criadores tinham em relação a seu invento. Aí estava o primeiro videogame lucrativo da história. Ao invés de vender a idéia para alguém, era melhor abrir o seu próprio negócio. E em 27 de Junho de 1972, a empresa Atari foi fundada. 10
Objetivo Objetivo: O objetivo era acertar a esfera (bola) com sua raquete (barra vertical) e lançar para o campo adversário, marcando ponto quando a bola passasse ao campo adversário. 11
Modelagem Computacional O que precisa para representar o PONG? Ball (ou quadrado); Paddle (ou barra); Como representar esses elementos? Retângulo Imagem ou Textura 12
Teoria XNA Pong Carregar e desenhar imagens na tela Estrutura e organização básica Colisões Rectangle Texture2D SpriteFont Códigos
Rectangle Rectangle(X, Y, Width, Height) Width (X,Y) Height 14
Texture2D Imagem a ser mapeada no retângulo para ser exibida na tela. 15
Font Implementações: Imagens; Compilado a partir de fontes. 16
Codigos Rectangle: Declaração: Rectangle ball_rect; Alocação: ball_rect = new Rectangle(X,Y,Width,Height) Acesso: ball_rect.x = numero_inteiro; Vector2: Declaração: Vector2 pos_texto; Alocação: pos_texto = new Vector2(X,Y) Acesso: pos_texto.x = numero_float; 17
Codigos Texture 2D: Declaracao: Texture2D ball; Carregamento: ball = Content.Load<Texture2D>("whitepixel"); ball = Texture2D.FromFile(GraphicsDevice, "Content/whitepixel.png"); Desenhando: spritebatch.begin(); spritebatch.draw(ball, position, Color.White); spritebatch.end(); 18
Codigos SpriteFont: Declaracao: SpriteFont Font; Carregamento: font= Content.Load<SpriteFont>( Fonte"); //aonde Fonte foi previamente adicionado ao projeto. Desenhando: spritebatch.begin(); spritebatch.drawstring(font, pos_texto, texto, Color.White); spritebatch.end(); Dica útil: Vector2 m_string = font.measurestring( Texto"); 19
Codigos Captura de dados para o teclado: public override void Update(GameTime gametime) {... 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
Teoria XNA Pong Carregar e desenhar imagens na tela Estrutura e organização básica Colisões Declarações de Variáveis Construtor Initialize LoadContent Update Draw UnloadContent
Estrutura e Organização Básica Váriaveis: Declaração de variáveis da classe. Construtor: Game1() -> possui o mesmo nome da classe. Executado quando se instancia um objeto do da Classe 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(60.ticks/seg): Update Onde se coloca a lógica principal do jogo (cálculos) Draw Onde se colocam as rotinas de desenho do jogo 22
Teoria XNA Pong Carregar e desenhar imagens na tela Estrutura e organização básica Colisões Retangular...
Colisão retangular update_objects(){ for (each_object) save_old_position(); calc new_object_position {based on velocity accel. etc.} if (collide_with_other_objects()) new_object_position = old_position(); {or if destroyed object remove it etc.} } Sintaxe XNA para Rectangle: if(rect1.intersects(rect2)) 24
Circular; Poligonal; OBB; AABB; Colisao recursiva por regiões; BSP; Quadtree; Octree; Vertex-in-triangle; (ad infinitum). 25
Teoria Prática
Prática Prática: Pong com colisão simples. Desafio: Pong com colisão vetorial, poligonal ou outra técnica mais avançada. 27
Referências http://pt.wikipedia.org/wiki/pong http://www.gamespp.com http://www.alexandrelobao.com/ 28
Agradecimento spritebatch.drawstring( Arial, "Obrigado Pela Atenção!", positionvect, Color.Black); 29