Apresentação
Alexandre Tolstenko Nogueira
[email protected]
http://tolstenko.net
http://forum.gamux.com.br
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!
Ao final do curso:
• Noções básicas do framework XNA;
• Estruturação de um jogo simples, porém
completo (braistorm, planejamento,
definindo limites);
NÃO ensinaremos:
• Desenhar (mas vamos usar muitos);
• Compor músicas (mas vamos colocar elas
nos jogos);
• Ganhar dinheiro (por hora...);
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?
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!
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...)
Teoria
Prática
Teoria
Componentes
XNA
Pong
Camadas
Facilidades
Carregar e
desenhar
imagens na tela
Estrutura e
organização
básica
Colisões
XNA Componentes
Framework
Graphics
Audio
Input
Math
Storage
Network
11
XNA Camadas
Starter Kits
Jogos
Framework
(extensões)
Framework
(núcleo)
Código
Modelo de Aplicação
Graphics
Plataforma
Legenda
Audio
Direct3D
XNA já provê
Input
XACT
Você cria
Conteúdo
Componentes
Pipeline de Conteúdo
(content pipeline)
Math
Storage
XINPUT
Comunidade
Network
XCONTENT
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
13
Teoria
XNA
Pong
Carregar e
desenhar
imagens na tela
História
Objetivo
Modelagem
Computacional
Estrutura e
organização
básica
Colisões
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.
15
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.
16
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.
17
Modelagem Computacional
• O que precisa para representar o PONG?
– Ball (ou quadrado);
– Paddle (ou barra);
• Como representar esses elementos?
– Retângulo
– Imagem ou Textura
18
Teoria
XNA
Pong
Rectangle
Carregar e
desenhar
imagens na tela
Texture2D
SpriteFont
Estrutura e
organização
básica
Colisões
Códigos
Rectangle
• Rectangle(X, Y, Width, Height)
Width
(X,Y)
Height
20
Texture2D
• Imagem a ser mapeada no retângulo para ser
exibida na tela.
21
Font
• Implementações:
– Imagens (veremos
como fazer isso em
outra aula);
– Compilado a partir
de fontes.
22
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;
23
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();
24
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");
25
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;
...
}
26
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
28
Teoria
XNA
Pong
Carregar e
desenhar
imagens na tela
Estrutura e
organização
básica
Retangular
Colisões
...
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))
30
…
•
•
•
•
•
•
•
•
•
•
•
Pixel a Pixel;
Circular;
Poligonal;
OBB;
AABB;
Portal;
BSP;
Quadtree;
Octree;
Vertex-in-triangle;
… (ad infinitum).
31
Teoria
Prática
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.
33
Referências
• http://pt.wikipedia.org/wiki/Pong
• http://www.gamespp.com
• http://www.alexandrelobao.com/
34
Agradecimento
spriteBatch.DrawString(
Arial,
"Obrigado Pela Atenção!",
positionVect,
Color.Black);
35
Download

Slide 1 - Tolstenko