Apresentação Alexandre Tolstenko Nogueira [email protected] .

35

Transcript of Apresentação Alexandre Tolstenko Nogueira [email protected] .

Page 1: Apresentação Alexandre Tolstenko Nogueira alexandre@tolstenko.net  .
Page 2: Apresentação Alexandre Tolstenko Nogueira alexandre@tolstenko.net  .

Apresentação

Alexandre Tolstenko [email protected]

http://tolstenko.nethttp://forum.gamux.com.br

Page 3: Apresentação Alexandre Tolstenko Nogueira alexandre@tolstenko.net  .

Objetivo do Curso

• Divulgar nosso trabalho;• Encontrar pessoas determinadas;• Formar um grupo forte e unido;• Fazer crescer o Gamux;• Ganhar campeonatos e chamar atenção!

Page 4: Apresentação Alexandre Tolstenko Nogueira alexandre@tolstenko.net  .

Ao final do curso:

• Noções básicas do framework XNA;• Estruturação de um jogo simples, porém

completo (braistorm, planejamento, definindo limites);

Page 5: Apresentação Alexandre Tolstenko Nogueira alexandre@tolstenko.net  .

NÃO ensinaremos:

• Desenhar (mas vamos usar muitos);• Compor músicas (mas vamos colocar elas

nos jogos);• Ganhar dinheiro (por hora...);

Page 6: Apresentação Alexandre Tolstenko Nogueira alexandre@tolstenko.net  .

Devaneios

• O que vou aprender com esse curso?– Pergunta errada... -> atitude passiva.

• O que quero aprender? (melhorou)• Tudo irá depender do seu interesse!• Quero programar um MMO-RPG ou talvez

um Crysis?• Eu também quero! Mas... Será se consigo?

Page 7: Apresentação Alexandre Tolstenko Nogueira alexandre@tolstenko.net  .

Devaneios

• Não apenas basta querer, tem que se empenhar, mas além de tudo temos que saber dimensionar o que queremos.

• Guardem bem isso:– Temos que saber dimensionar nossos objetivos!

• Como aprendo isso?– Sentindo como se programa jogos simples!

Page 8: Apresentação Alexandre Tolstenko Nogueira alexandre@tolstenko.net  .

PONG(Sons de carteiras quebrando e teclados

sendo arremessados; grunhidos tímidos de desespero do garoto do fundo que queria

fazer um jogo da Barbie...)

Page 9: Apresentação Alexandre Tolstenko Nogueira alexandre@tolstenko.net  .

Teoria Prática

Page 10: Apresentação Alexandre Tolstenko Nogueira alexandre@tolstenko.net  .

Teoria

XNA

Componentes Camadas Facilidades

PongCarregar e desenhar

imagens na tela

Estrutura e organização

básicaColisões

Page 11: Apresentação Alexandre Tolstenko Nogueira alexandre@tolstenko.net  .

11

XNA Componentes

Framework

Graphics Audio Input Math Storage Network

Page 12: Apresentação Alexandre Tolstenko Nogueira alexandre@tolstenko.net  .

XNA Camadas

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

Page 13: Apresentação Alexandre Tolstenko Nogueira alexandre@tolstenko.net  .

13

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

Page 14: Apresentação Alexandre Tolstenko Nogueira alexandre@tolstenko.net  .

Teoria

XNA Pong

História Objetivo Modelagem Computacional

Carregar e desenhar

imagens na tela

Estrutura e organização

básicaColisões

Page 15: Apresentação Alexandre Tolstenko Nogueira alexandre@tolstenko.net  .

15

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.

Page 16: Apresentação Alexandre Tolstenko Nogueira alexandre@tolstenko.net  .

16

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.

Page 17: Apresentação Alexandre Tolstenko Nogueira alexandre@tolstenko.net  .

17

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.

Page 18: Apresentação Alexandre Tolstenko Nogueira alexandre@tolstenko.net  .

18

Modelagem Computacional

• O que precisa para representar o PONG?–Ball (ou quadrado);–Paddle (ou barra);

• Como representar esses elementos?–Retângulo– Imagem ou Textura

Page 19: Apresentação Alexandre Tolstenko Nogueira alexandre@tolstenko.net  .

Teoria

XNA PongCarregar e desenhar

imagens na tela

Rectangle Texture2D SpriteFont Códigos

Estrutura e organização

básicaColisões

Page 20: Apresentação Alexandre Tolstenko Nogueira alexandre@tolstenko.net  .

20

Rectangle

• Rectangle(X, Y, Width, Height)

(X,Y)

Width

Height

Page 21: Apresentação Alexandre Tolstenko Nogueira alexandre@tolstenko.net  .

21

Texture2D

• Imagem a ser mapeada no retângulo para ser exibida na tela.

Page 22: Apresentação Alexandre Tolstenko Nogueira alexandre@tolstenko.net  .

22

Font

• Implementações:– Imagens (veremos

como fazer isso em outra aula);

– Compilado a partir de fontes.

Page 23: Apresentação Alexandre Tolstenko Nogueira alexandre@tolstenko.net  .

23

Códigos

• 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;

Page 24: Apresentação Alexandre Tolstenko Nogueira alexandre@tolstenko.net  .

24

Códigos

• Texture 2D:– Declaração: 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();

Page 25: Apresentação Alexandre Tolstenko Nogueira alexandre@tolstenko.net  .

25

Códigos

• SpriteFont:– Declaração: 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");

Page 26: Apresentação Alexandre Tolstenko Nogueira alexandre@tolstenko.net  .

26

Códigos

• 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; ...}

Page 27: Apresentação Alexandre Tolstenko Nogueira alexandre@tolstenko.net  .

Teoria

XNA PongCarregar e desenhar

imagens na tela

Estrutura e organização

básica

Declarações de Variáveis Construtor Initialize LoadContent Update Draw UnloadContent

Colisões

Page 28: Apresentação Alexandre Tolstenko Nogueira alexandre@tolstenko.net  .

28

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

Page 29: Apresentação Alexandre Tolstenko Nogueira alexandre@tolstenko.net  .

Teoria

XNA PongCarregar e desenhar

imagens na tela

Estrutura e organização

básicaColisões

Retangular ...

Page 30: Apresentação Alexandre Tolstenko Nogueira alexandre@tolstenko.net  .

30

Colisão retangularupdate_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))

Page 31: Apresentação Alexandre Tolstenko Nogueira alexandre@tolstenko.net  .

31

• Pixel a Pixel;• Circular;• Poligonal;• OBB;• AABB;• Portal;• BSP;• Quadtree;• Octree;• Vertex-in-triangle;• … (ad infinitum).

Page 32: Apresentação Alexandre Tolstenko Nogueira alexandre@tolstenko.net  .

Teoria Prática

Page 33: Apresentação Alexandre Tolstenko Nogueira alexandre@tolstenko.net  .

33

Prática

• Prática:–Pong com colisão simples.• Opcional: transformar o pong em Breakout

• Desafio:–Pong com colisão vetorial, poligonal ou

outra técnica mais avançada.

Page 34: Apresentação Alexandre Tolstenko Nogueira alexandre@tolstenko.net  .

34

Referências

• http://pt.wikipedia.org/wiki/Pong• http://www.gamespp.com• http://www.alexandrelobao.com/

Page 35: Apresentação Alexandre Tolstenko Nogueira alexandre@tolstenko.net  .

35

Agradecimento

spriteBatch.DrawString( Arial, "Obrigado Pela Atenção!", positionVect, Color.Black);